File: C:/Ruby27-x64/share/doc/ruby/html/Net/HTTPGenericRequest.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>class Net::HTTPGenericRequest - RDoc Documentation</title>
<script type="text/javascript">
var rdoc_rel_prefix = "../";
var index_rel_prefix = "../";
</script>
<script src="../js/navigation.js" defer></script>
<script src="../js/search.js" defer></script>
<script src="../js/search_index.js" defer></script>
<script src="../js/searcher.js" defer></script>
<script src="../js/darkfish.js" defer></script>
<link href="../css/fonts.css" rel="stylesheet">
<link href="../css/rdoc.css" rel="stylesheet">
<body id="top" role="document" class="class">
<nav role="navigation">
<div id="project-navigation">
<div id="home-section" role="region" title="Quick navigation" class="nav-section">
<h2>
<a href="../index.html" rel="home">Home</a>
</h2>
<div id="table-of-contents-navigation">
<a href="../table_of_contents.html#pages">Pages</a>
<a href="../table_of_contents.html#classes">Classes</a>
<a href="../table_of_contents.html#methods">Methods</a>
</div>
</div>
<div id="search-section" role="search" class="project-section initially-hidden">
<form action="#" method="get" accept-charset="utf-8">
<div id="search-field-wrapper">
<input id="search-field" role="combobox" aria-label="Search"
aria-autocomplete="list" aria-controls="search-results"
type="text" name="search" placeholder="Search" spellcheck="false"
title="Type to search, Up and Down to navigate, Enter to load">
</div>
<ul id="search-results" aria-label="Search Results"
aria-busy="false" aria-expanded="false"
aria-atomic="false" class="initially-hidden"></ul>
</form>
</div>
</div>
<div id="class-metadata">
<div id="parent-class-section" class="nav-section">
<h3>Parent</h3>
<p class="link"><a href="../Object.html">Object</a>
</div>
<div id="includes-section" class="nav-section">
<h3>Included Modules</h3>
<ul class="link-list">
<li><a class="include" href="HTTPHeader.html">Net::HTTPHeader</a>
</ul>
</div>
<!-- Method Quickref -->
<div id="method-list-section" class="nav-section">
<h3>Methods</h3>
<ul class="link-list" role="directory">
<li ><a href="#method-c-new">::new</a>
<li ><a href="#method-i-body-3D">#body=</a>
<li ><a href="#method-i-body_exist-3F">#body_exist?</a>
<li ><a href="#method-i-body_stream-3D">#body_stream=</a>
<li ><a href="#method-i-encode_multipart_form_data">#encode_multipart_form_data</a>
<li ><a href="#method-i-flush_buffer">#flush_buffer</a>
<li ><a href="#method-i-inspect">#inspect</a>
<li ><a href="#method-i-quote_string">#quote_string</a>
<li ><a href="#method-i-request_body_permitted-3F">#request_body_permitted?</a>
<li ><a href="#method-i-response_body_permitted-3F">#response_body_permitted?</a>
<li ><a href="#method-i-send_request_with_body">#send_request_with_body</a>
<li ><a href="#method-i-send_request_with_body_data">#send_request_with_body_data</a>
<li ><a href="#method-i-send_request_with_body_stream">#send_request_with_body_stream</a>
<li ><a href="#method-i-supply_default_content_type">#supply_default_content_type</a>
<li ><a href="#method-i-wait_for_continue">#wait_for_continue</a>
<li ><a href="#method-i-write_header">#write_header</a>
</ul>
</div>
</div>
</nav>
<main role="main" aria-labelledby="class-Net::HTTPGenericRequest">
<h1 id="class-Net::HTTPGenericRequest" class="class">
class Net::HTTPGenericRequest
</h1>
<section class="description">
<p><a href="HTTPGenericRequest.html"><code>HTTPGenericRequest</code></a> is the parent of the <a href="HTTPRequest.html"><code>Net::HTTPRequest</code></a> class. Do not use this directly; use a subclass of <a href="HTTPRequest.html"><code>Net::HTTPRequest</code></a>.</p>
<p>Mixes in the <a href="HTTPHeader.html"><code>Net::HTTPHeader</code></a> module to provide easier access to HTTP headers.</p>
</section>
<section id="5Buntitled-5D" class="documentation-section">
<section class="attribute-method-details" class="method-section">
<header>
<h3>Attributes</h3>
</header>
<div id="attribute-i-body" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">body</span><span
class="attribute-access-type">[R]</span>
</div>
<div class="method-description">
</div>
</div>
<div id="attribute-i-body_stream" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">body_stream</span><span
class="attribute-access-type">[R]</span>
</div>
<div class="method-description">
</div>
</div>
<div id="attribute-i-decode_content" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">decode_content</span><span
class="attribute-access-type">[R]</span>
</div>
<div class="method-description">
<p>Automatically set to false if the user sets the Accept-Encoding header. This indicates they wish to handle Content-encoding in responses themselves.</p>
</div>
</div>
<div id="attribute-i-method" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">method</span><span
class="attribute-access-type">[R]</span>
</div>
<div class="method-description">
</div>
</div>
<div id="attribute-i-path" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">path</span><span
class="attribute-access-type">[R]</span>
</div>
<div class="method-description">
</div>
</div>
<div id="attribute-i-uri" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">uri</span><span
class="attribute-access-type">[R]</span>
</div>
<div class="method-description">
</div>
</div>
</section>
<section id="public-class-5Buntitled-5D-method-details" class="method-section">
<header>
<h3>Public Class Methods</h3>
</header>
<div id="method-c-new" class="method-detail ">
<div class="method-heading">
<span class="method-name">new</span><span
class="method-args">(m, reqbody, resbody, uri_or_path, initheader = nil)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="new-source">
<pre><span class="ruby-comment"># File lib/net/http/generic_request.rb, line 11</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">initialize</span>(<span class="ruby-identifier">m</span>, <span class="ruby-identifier">reqbody</span>, <span class="ruby-identifier">resbody</span>, <span class="ruby-identifier">uri_or_path</span>, <span class="ruby-identifier">initheader</span> = <span class="ruby-keyword">nil</span>)
<span class="ruby-ivar">@method</span> = <span class="ruby-identifier">m</span>
<span class="ruby-ivar">@request_has_body</span> = <span class="ruby-identifier">reqbody</span>
<span class="ruby-ivar">@response_has_body</span> = <span class="ruby-identifier">resbody</span>
<span class="ruby-keyword">if</span> <span class="ruby-constant">URI</span> <span class="ruby-operator">===</span> <span class="ruby-identifier">uri_or_path</span> <span class="ruby-keyword">then</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-string">"not an HTTP URI"</span> <span class="ruby-keyword">unless</span> <span class="ruby-constant">URI</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTP</span> <span class="ruby-operator">===</span> <span class="ruby-identifier">uri_or_path</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-string">"no host component for URI"</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">uri_or_path</span>.<span class="ruby-identifier">hostname</span>
<span class="ruby-ivar">@uri</span> = <span class="ruby-identifier">uri_or_path</span>.<span class="ruby-identifier">dup</span>
<span class="ruby-identifier">host</span> = <span class="ruby-ivar">@uri</span>.<span class="ruby-identifier">hostname</span>.<span class="ruby-identifier">dup</span>
<span class="ruby-identifier">host</span> <span class="ruby-operator"><<</span> <span class="ruby-string">":"</span>.<span class="ruby-identifier">freeze</span> <span class="ruby-operator"><<</span> <span class="ruby-ivar">@uri</span>.<span class="ruby-identifier">port</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@uri</span>.<span class="ruby-identifier">port</span> <span class="ruby-operator">!=</span> <span class="ruby-ivar">@uri</span>.<span class="ruby-identifier">default_port</span>
<span class="ruby-ivar">@path</span> = <span class="ruby-identifier">uri_or_path</span>.<span class="ruby-identifier">request_uri</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-string">"no HTTP request path given"</span> <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@path</span>
<span class="ruby-keyword">else</span>
<span class="ruby-ivar">@uri</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-identifier">host</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-string">"no HTTP request path given"</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">uri_or_path</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-string">"HTTP request path is empty"</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">uri_or_path</span>.<span class="ruby-identifier">empty?</span>
<span class="ruby-ivar">@path</span> = <span class="ruby-identifier">uri_or_path</span>.<span class="ruby-identifier">dup</span>
<span class="ruby-keyword">end</span>
<span class="ruby-ivar">@decode_content</span> = <span class="ruby-keyword">false</span>
<span class="ruby-keyword">if</span> <span class="ruby-ivar">@response_has_body</span> <span class="ruby-keyword">and</span> <span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTP</span><span class="ruby-operator">::</span><span class="ruby-constant">HAVE_ZLIB</span> <span class="ruby-keyword">then</span>
<span class="ruby-keyword">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">initheader</span> <span class="ruby-operator">||</span>
<span class="ruby-operator">!</span><span class="ruby-identifier">initheader</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">any?</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">k</span><span class="ruby-operator">|</span>
<span class="ruby-node">%w[accept-encoding range]</span>.<span class="ruby-identifier">include?</span> <span class="ruby-identifier">k</span>.<span class="ruby-identifier">downcase</span>
} <span class="ruby-keyword">then</span>
<span class="ruby-ivar">@decode_content</span> = <span class="ruby-keyword">true</span>
<span class="ruby-identifier">initheader</span> = <span class="ruby-identifier">initheader</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">initheader</span>.<span class="ruby-identifier">dup</span> <span class="ruby-operator">:</span> {}
<span class="ruby-identifier">initheader</span>[<span class="ruby-string">"accept-encoding"</span>] =
<span class="ruby-string">"gzip;q=1.0,deflate;q=0.6,identity;q=0.3"</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">initialize_http_header</span> <span class="ruby-identifier">initheader</span>
<span class="ruby-keyword">self</span>[<span class="ruby-string">'Accept'</span>] <span class="ruby-operator">||=</span> <span class="ruby-string">'*/*'</span>
<span class="ruby-keyword">self</span>[<span class="ruby-string">'User-Agent'</span>] <span class="ruby-operator">||=</span> <span class="ruby-string">'Ruby'</span>
<span class="ruby-keyword">self</span>[<span class="ruby-string">'Host'</span>] <span class="ruby-operator">||=</span> <span class="ruby-identifier">host</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">host</span>
<span class="ruby-ivar">@body</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-ivar">@body_stream</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-ivar">@body_data</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
</section>
<section id="public-instance-5Buntitled-5D-method-details" class="method-section">
<header>
<h3>Public Instance Methods</h3>
</header>
<div id="method-i-body-3D" class="method-detail ">
<div class="method-heading">
<span class="method-name">body=</span><span
class="method-args">(str)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="body-3D-source">
<pre><span class="ruby-comment"># File lib/net/http/generic_request.rb, line 93</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">body=</span>(<span class="ruby-identifier">str</span>)
<span class="ruby-ivar">@body</span> = <span class="ruby-identifier">str</span>
<span class="ruby-ivar">@body_stream</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-ivar">@body_data</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-identifier">str</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-body_exist-3F" class="method-detail ">
<div class="method-heading">
<span class="method-name">body_exist?</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="body_exist-3F-source">
<pre><span class="ruby-comment"># File lib/net/http/generic_request.rb, line 86</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">body_exist?</span>
<span class="ruby-identifier">warn</span> <span class="ruby-string">"Net::HTTPRequest#body_exist? is obsolete; use response_body_permitted?"</span>, <span class="ruby-value">uplevel:</span> <span class="ruby-value">1</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">$VERBOSE</span>
<span class="ruby-identifier">response_body_permitted?</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-body_stream-3D" class="method-detail ">
<div class="method-heading">
<span class="method-name">body_stream=</span><span
class="method-args">(input)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="body_stream-3D-source">
<pre><span class="ruby-comment"># File lib/net/http/generic_request.rb, line 102</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">body_stream=</span>(<span class="ruby-identifier">input</span>)
<span class="ruby-ivar">@body</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-ivar">@body_stream</span> = <span class="ruby-identifier">input</span>
<span class="ruby-ivar">@body_data</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-identifier">input</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-inspect" class="method-detail ">
<div class="method-heading">
<span class="method-name">inspect</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="inspect-source">
<pre><span class="ruby-comment"># File lib/net/http/generic_request.rb, line 64</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">inspect</span>
<span class="ruby-node">"\#<#{self.class} #{@method}>"</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-request_body_permitted-3F" class="method-detail ">
<div class="method-heading">
<span class="method-name">request_body_permitted?</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="request_body_permitted-3F-source">
<pre><span class="ruby-comment"># File lib/net/http/generic_request.rb, line 78</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">request_body_permitted?</span>
<span class="ruby-ivar">@request_has_body</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-response_body_permitted-3F" class="method-detail ">
<div class="method-heading">
<span class="method-name">response_body_permitted?</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="response_body_permitted-3F-source">
<pre><span class="ruby-comment"># File lib/net/http/generic_request.rb, line 82</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">response_body_permitted?</span>
<span class="ruby-ivar">@response_has_body</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
</section>
<section id="private-instance-5Buntitled-5D-method-details" class="method-section">
<header>
<h3>Private Instance Methods</h3>
</header>
<div id="method-i-encode_multipart_form_data" class="method-detail ">
<div class="method-heading">
<span class="method-name">encode_multipart_form_data</span><span
class="method-args">(out, params, opt)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="encode_multipart_form_data-source">
<pre><span class="ruby-comment"># File lib/net/http/generic_request.rb, line 237</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">encode_multipart_form_data</span>(<span class="ruby-identifier">out</span>, <span class="ruby-identifier">params</span>, <span class="ruby-identifier">opt</span>)
<span class="ruby-identifier">charset</span> = <span class="ruby-identifier">opt</span>[<span class="ruby-value">:charset</span>]
<span class="ruby-identifier">boundary</span> = <span class="ruby-identifier">opt</span>[<span class="ruby-value">:boundary</span>]
<span class="ruby-identifier">require</span> <span class="ruby-string">'securerandom'</span> <span class="ruby-keyword">unless</span> <span class="ruby-keyword">defined?</span>(<span class="ruby-constant">SecureRandom</span>)
<span class="ruby-identifier">boundary</span> <span class="ruby-operator">||=</span> <span class="ruby-constant">SecureRandom</span>.<span class="ruby-identifier">urlsafe_base64</span>(<span class="ruby-value">40</span>)
<span class="ruby-identifier">chunked_p</span> = <span class="ruby-identifier">chunked?</span>
<span class="ruby-identifier">buf</span> = <span class="ruby-string">''</span>
<span class="ruby-identifier">params</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">key</span>, <span class="ruby-identifier">value</span>, <span class="ruby-identifier">h</span>={}<span class="ruby-operator">|</span>
<span class="ruby-identifier">key</span> = <span class="ruby-identifier">quote_string</span>(<span class="ruby-identifier">key</span>, <span class="ruby-identifier">charset</span>)
<span class="ruby-identifier">filename</span> =
<span class="ruby-identifier">h</span>.<span class="ruby-identifier">key?</span>(<span class="ruby-value">:filename</span>) <span class="ruby-operator">?</span> <span class="ruby-identifier">h</span>[<span class="ruby-value">:filename</span>] <span class="ruby-operator">:</span>
<span class="ruby-identifier">value</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value">:to_path</span>) <span class="ruby-operator">?</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">basename</span>(<span class="ruby-identifier">value</span>.<span class="ruby-identifier">to_path</span>) <span class="ruby-operator">:</span>
<span class="ruby-keyword">nil</span>
<span class="ruby-identifier">buf</span> <span class="ruby-operator"><<</span> <span class="ruby-node">"--#{boundary}\r\n"</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">filename</span>
<span class="ruby-identifier">filename</span> = <span class="ruby-identifier">quote_string</span>(<span class="ruby-identifier">filename</span>, <span class="ruby-identifier">charset</span>)
<span class="ruby-identifier">type</span> = <span class="ruby-identifier">h</span>[<span class="ruby-value">:content_type</span>] <span class="ruby-operator">||</span> <span class="ruby-string">'application/octet-stream'</span>
<span class="ruby-identifier">buf</span> <span class="ruby-operator"><<</span> <span class="ruby-string">"Content-Disposition: form-data; "</span> \
<span class="ruby-node">"name=\"#{key}\"; filename=\"#{filename}\"\r\n"</span> \
<span class="ruby-node">"Content-Type: #{type}\r\n\r\n"</span>
<span class="ruby-keyword">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">out</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value">:write</span>) <span class="ruby-operator">||</span> <span class="ruby-operator">!</span><span class="ruby-identifier">value</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value">:read</span>)
<span class="ruby-comment"># if +out+ is not an IO or +value+ is not an IO</span>
<span class="ruby-identifier">buf</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">value</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value">:read</span>) <span class="ruby-operator">?</span> <span class="ruby-identifier">value</span>.<span class="ruby-identifier">read</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">value</span>)
<span class="ruby-keyword">elsif</span> <span class="ruby-identifier">value</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value">:size</span>) <span class="ruby-operator">&&</span> <span class="ruby-identifier">chunked_p</span>
<span class="ruby-comment"># if +out+ is an IO and +value+ is a File, use IO.copy_stream</span>
<span class="ruby-identifier">flush_buffer</span>(<span class="ruby-identifier">out</span>, <span class="ruby-identifier">buf</span>, <span class="ruby-identifier">chunked_p</span>)
<span class="ruby-identifier">out</span> <span class="ruby-operator"><<</span> <span class="ruby-string">"%x\r\n"</span> <span class="ruby-operator">%</span> <span class="ruby-identifier">value</span>.<span class="ruby-identifier">size</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">chunked_p</span>
<span class="ruby-constant">IO</span>.<span class="ruby-identifier">copy_stream</span>(<span class="ruby-identifier">value</span>, <span class="ruby-identifier">out</span>)
<span class="ruby-identifier">out</span> <span class="ruby-operator"><<</span> <span class="ruby-string">"\r\n"</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">chunked_p</span>
<span class="ruby-keyword">else</span>
<span class="ruby-comment"># +out+ is an IO, and +value+ is not a File but an IO</span>
<span class="ruby-identifier">flush_buffer</span>(<span class="ruby-identifier">out</span>, <span class="ruby-identifier">buf</span>, <span class="ruby-identifier">chunked_p</span>)
<span class="ruby-value">1</span> <span class="ruby-keyword">while</span> <span class="ruby-identifier">flush_buffer</span>(<span class="ruby-identifier">out</span>, <span class="ruby-identifier">value</span>.<span class="ruby-identifier">read</span>(<span class="ruby-value">4096</span>), <span class="ruby-identifier">chunked_p</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-comment"># non-file field:</span>
<span class="ruby-comment"># HTML5 says, "The parts of the generated multipart/form-data</span>
<span class="ruby-comment"># resource that correspond to non-file fields must not have a</span>
<span class="ruby-comment"># Content-Type header specified."</span>
<span class="ruby-identifier">buf</span> <span class="ruby-operator"><<</span> <span class="ruby-node">"Content-Disposition: form-data; name=\"#{key}\"\r\n\r\n"</span>
<span class="ruby-identifier">buf</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">value</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value">:read</span>) <span class="ruby-operator">?</span> <span class="ruby-identifier">value</span>.<span class="ruby-identifier">read</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">value</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">buf</span> <span class="ruby-operator"><<</span> <span class="ruby-string">"\r\n"</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">buf</span> <span class="ruby-operator"><<</span> <span class="ruby-node">"--#{boundary}--\r\n"</span>
<span class="ruby-identifier">flush_buffer</span>(<span class="ruby-identifier">out</span>, <span class="ruby-identifier">buf</span>, <span class="ruby-identifier">chunked_p</span>)
<span class="ruby-identifier">out</span> <span class="ruby-operator"><<</span> <span class="ruby-string">"0\r\n\r\n"</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">chunked_p</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-flush_buffer" class="method-detail ">
<div class="method-heading">
<span class="method-name">flush_buffer</span><span
class="method-args">(out, buf, chunked_p)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="flush_buffer-source">
<pre><span class="ruby-comment"># File lib/net/http/generic_request.rb, line 293</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">flush_buffer</span>(<span class="ruby-identifier">out</span>, <span class="ruby-identifier">buf</span>, <span class="ruby-identifier">chunked_p</span>)
<span class="ruby-keyword">return</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">buf</span>
<span class="ruby-identifier">out</span> <span class="ruby-operator"><<</span> <span class="ruby-string">"%x\r\n"</span><span class="ruby-operator">%</span><span class="ruby-identifier">buf</span>.<span class="ruby-identifier">bytesize</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">chunked_p</span>
<span class="ruby-identifier">out</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">buf</span>
<span class="ruby-identifier">out</span> <span class="ruby-operator"><<</span> <span class="ruby-string">"\r\n"</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">chunked_p</span>
<span class="ruby-identifier">buf</span>.<span class="ruby-identifier">clear</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-quote_string" class="method-detail ">
<div class="method-heading">
<span class="method-name">quote_string</span><span
class="method-args">(str, charset)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="quote_string-source">
<pre><span class="ruby-comment"># File lib/net/http/generic_request.rb, line 288</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">quote_string</span>(<span class="ruby-identifier">str</span>, <span class="ruby-identifier">charset</span>)
<span class="ruby-identifier">str</span> = <span class="ruby-identifier">str</span>.<span class="ruby-identifier">encode</span>(<span class="ruby-identifier">charset</span>, <span class="ruby-value">fallback:</span><span class="ruby-operator">-></span>(<span class="ruby-identifier">c</span>){<span class="ruby-string">'&#%d;'</span><span class="ruby-operator">%</span><span class="ruby-identifier">c</span>.<span class="ruby-identifier">encode</span>(<span class="ruby-string">"UTF-8"</span>).<span class="ruby-identifier">ord</span>}) <span class="ruby-keyword">if</span> <span class="ruby-identifier">charset</span>
<span class="ruby-identifier">str</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp">/[\\"]/</span>, <span class="ruby-string">'\\\\\&'</span>)
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-send_request_with_body" class="method-detail ">
<div class="method-heading">
<span class="method-name">send_request_with_body</span><span
class="method-args">(sock, ver, path, body)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="send_request_with_body-source">
<pre><span class="ruby-comment"># File lib/net/http/generic_request.rb, line 183</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">send_request_with_body</span>(<span class="ruby-identifier">sock</span>, <span class="ruby-identifier">ver</span>, <span class="ruby-identifier">path</span>, <span class="ruby-identifier">body</span>)
<span class="ruby-keyword">self</span>.<span class="ruby-identifier">content_length</span> = <span class="ruby-identifier">body</span>.<span class="ruby-identifier">bytesize</span>
<span class="ruby-identifier">delete</span> <span class="ruby-string">'Transfer-Encoding'</span>
<span class="ruby-identifier">supply_default_content_type</span>
<span class="ruby-identifier">write_header</span> <span class="ruby-identifier">sock</span>, <span class="ruby-identifier">ver</span>, <span class="ruby-identifier">path</span>
<span class="ruby-identifier">wait_for_continue</span> <span class="ruby-identifier">sock</span>, <span class="ruby-identifier">ver</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">sock</span>.<span class="ruby-identifier">continue_timeout</span>
<span class="ruby-identifier">sock</span>.<span class="ruby-identifier">write</span> <span class="ruby-identifier">body</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-send_request_with_body_data" class="method-detail ">
<div class="method-heading">
<span class="method-name">send_request_with_body_data</span><span
class="method-args">(sock, ver, path, params)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="send_request_with_body_data-source">
<pre><span class="ruby-comment"># File lib/net/http/generic_request.rb, line 211</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">send_request_with_body_data</span>(<span class="ruby-identifier">sock</span>, <span class="ruby-identifier">ver</span>, <span class="ruby-identifier">path</span>, <span class="ruby-identifier">params</span>)
<span class="ruby-keyword">if</span> <span class="ruby-regexp">/\Amultipart\/form-data\z/i</span> <span class="ruby-operator">!~</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">content_type</span>
<span class="ruby-keyword">self</span>.<span class="ruby-identifier">content_type</span> = <span class="ruby-string">'application/x-www-form-urlencoded'</span>
<span class="ruby-keyword">return</span> <span class="ruby-identifier">send_request_with_body</span>(<span class="ruby-identifier">sock</span>, <span class="ruby-identifier">ver</span>, <span class="ruby-identifier">path</span>, <span class="ruby-constant">URI</span>.<span class="ruby-identifier">encode_www_form</span>(<span class="ruby-identifier">params</span>))
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">opt</span> = <span class="ruby-ivar">@form_option</span>.<span class="ruby-identifier">dup</span>
<span class="ruby-identifier">require</span> <span class="ruby-string">'securerandom'</span> <span class="ruby-keyword">unless</span> <span class="ruby-keyword">defined?</span>(<span class="ruby-constant">SecureRandom</span>)
<span class="ruby-identifier">opt</span>[<span class="ruby-value">:boundary</span>] <span class="ruby-operator">||=</span> <span class="ruby-constant">SecureRandom</span>.<span class="ruby-identifier">urlsafe_base64</span>(<span class="ruby-value">40</span>)
<span class="ruby-keyword">self</span>.<span class="ruby-identifier">set_content_type</span>(<span class="ruby-keyword">self</span>.<span class="ruby-identifier">content_type</span>, <span class="ruby-value">boundary:</span> <span class="ruby-identifier">opt</span>[<span class="ruby-value">:boundary</span>])
<span class="ruby-keyword">if</span> <span class="ruby-identifier">chunked?</span>
<span class="ruby-identifier">write_header</span> <span class="ruby-identifier">sock</span>, <span class="ruby-identifier">ver</span>, <span class="ruby-identifier">path</span>
<span class="ruby-identifier">encode_multipart_form_data</span>(<span class="ruby-identifier">sock</span>, <span class="ruby-identifier">params</span>, <span class="ruby-identifier">opt</span>)
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">require</span> <span class="ruby-string">'tempfile'</span>
<span class="ruby-identifier">file</span> = <span class="ruby-constant">Tempfile</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">'multipart'</span>)
<span class="ruby-identifier">file</span>.<span class="ruby-identifier">binmode</span>
<span class="ruby-identifier">encode_multipart_form_data</span>(<span class="ruby-identifier">file</span>, <span class="ruby-identifier">params</span>, <span class="ruby-identifier">opt</span>)
<span class="ruby-identifier">file</span>.<span class="ruby-identifier">rewind</span>
<span class="ruby-keyword">self</span>.<span class="ruby-identifier">content_length</span> = <span class="ruby-identifier">file</span>.<span class="ruby-identifier">size</span>
<span class="ruby-identifier">write_header</span> <span class="ruby-identifier">sock</span>, <span class="ruby-identifier">ver</span>, <span class="ruby-identifier">path</span>
<span class="ruby-constant">IO</span>.<span class="ruby-identifier">copy_stream</span>(<span class="ruby-identifier">file</span>, <span class="ruby-identifier">sock</span>)
<span class="ruby-identifier">file</span>.<span class="ruby-identifier">close</span>(<span class="ruby-keyword">true</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-send_request_with_body_stream" class="method-detail ">
<div class="method-heading">
<span class="method-name">send_request_with_body_stream</span><span
class="method-args">(sock, ver, path, f)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="send_request_with_body_stream-source">
<pre><span class="ruby-comment"># File lib/net/http/generic_request.rb, line 192</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">send_request_with_body_stream</span>(<span class="ruby-identifier">sock</span>, <span class="ruby-identifier">ver</span>, <span class="ruby-identifier">path</span>, <span class="ruby-identifier">f</span>)
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">content_length</span>() <span class="ruby-keyword">or</span> <span class="ruby-identifier">chunked?</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>,
<span class="ruby-string">"Content-Length not given and Transfer-Encoding is not `chunked'"</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">supply_default_content_type</span>
<span class="ruby-identifier">write_header</span> <span class="ruby-identifier">sock</span>, <span class="ruby-identifier">ver</span>, <span class="ruby-identifier">path</span>
<span class="ruby-identifier">wait_for_continue</span> <span class="ruby-identifier">sock</span>, <span class="ruby-identifier">ver</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">sock</span>.<span class="ruby-identifier">continue_timeout</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">chunked?</span>
<span class="ruby-identifier">chunker</span> = <span class="ruby-constant">Chunker</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">sock</span>)
<span class="ruby-constant">IO</span>.<span class="ruby-identifier">copy_stream</span>(<span class="ruby-identifier">f</span>, <span class="ruby-identifier">chunker</span>)
<span class="ruby-identifier">chunker</span>.<span class="ruby-identifier">finish</span>
<span class="ruby-keyword">else</span>
<span class="ruby-comment"># copy_stream can sendfile() to sock.io unless we use SSL.</span>
<span class="ruby-comment"># If sock.io is an SSLSocket, copy_stream will hit SSL_write()</span>
<span class="ruby-constant">IO</span>.<span class="ruby-identifier">copy_stream</span>(<span class="ruby-identifier">f</span>, <span class="ruby-identifier">sock</span>.<span class="ruby-identifier">io</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-supply_default_content_type" class="method-detail ">
<div class="method-heading">
<span class="method-name">supply_default_content_type</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="supply_default_content_type-source">
<pre><span class="ruby-comment"># File lib/net/http/generic_request.rb, line 301</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">supply_default_content_type</span>
<span class="ruby-keyword">return</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">content_type</span>()
<span class="ruby-identifier">warn</span> <span class="ruby-string">'net/http: Content-Type did not set; using application/x-www-form-urlencoded'</span>, <span class="ruby-value">uplevel:</span> <span class="ruby-value">1</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">$VERBOSE</span>
<span class="ruby-identifier">set_content_type</span> <span class="ruby-string">'application/x-www-form-urlencoded'</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-wait_for_continue" class="method-detail ">
<div class="method-heading">
<span class="method-name">wait_for_continue</span><span
class="method-args">(sock, ver)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Waits up to the continue timeout for a response from the server provided we're speaking HTTP 1.1 and are expecting a 100-continue response.</p>
<div class="method-source-code" id="wait_for_continue-source">
<pre><span class="ruby-comment"># File lib/net/http/generic_request.rb, line 311</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">wait_for_continue</span>(<span class="ruby-identifier">sock</span>, <span class="ruby-identifier">ver</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">ver</span> <span class="ruby-operator">>=</span> <span class="ruby-string">'1.1'</span> <span class="ruby-keyword">and</span> <span class="ruby-ivar">@header</span>[<span class="ruby-string">'expect'</span>] <span class="ruby-keyword">and</span>
<span class="ruby-ivar">@header</span>[<span class="ruby-string">'expect'</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-string">'100-continue'</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">sock</span>.<span class="ruby-identifier">io</span>.<span class="ruby-identifier">to_io</span>.<span class="ruby-identifier">wait_readable</span>(<span class="ruby-identifier">sock</span>.<span class="ruby-identifier">continue_timeout</span>)
<span class="ruby-identifier">res</span> = <span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTPResponse</span>.<span class="ruby-identifier">read_new</span>(<span class="ruby-identifier">sock</span>)
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">res</span>.<span class="ruby-identifier">kind_of?</span>(<span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTPContinue</span>)
<span class="ruby-identifier">res</span>.<span class="ruby-identifier">decode_content</span> = <span class="ruby-ivar">@decode_content</span>
<span class="ruby-identifier">throw</span> <span class="ruby-value">:response</span>, <span class="ruby-identifier">res</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-write_header" class="method-detail ">
<div class="method-heading">
<span class="method-name">write_header</span><span
class="method-args">(sock, ver, path)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="write_header-source">
<pre><span class="ruby-comment"># File lib/net/http/generic_request.rb, line 324</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">write_header</span>(<span class="ruby-identifier">sock</span>, <span class="ruby-identifier">ver</span>, <span class="ruby-identifier">path</span>)
<span class="ruby-identifier">reqline</span> = <span class="ruby-node">"#{@method} #{path} HTTP/#{ver}"</span>
<span class="ruby-keyword">if</span> <span class="ruby-regexp">/[\r\n]/</span> <span class="ruby-operator">=~</span> <span class="ruby-identifier">reqline</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-string">"A Request-Line must not contain CR or LF"</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">buf</span> = <span class="ruby-string">""</span>
<span class="ruby-identifier">buf</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">reqline</span> <span class="ruby-operator"><<</span> <span class="ruby-string">"\r\n"</span>
<span class="ruby-identifier">each_capitalized</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">k</span>,<span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">buf</span> <span class="ruby-operator"><<</span> <span class="ruby-node">"#{k}: #{v}\r\n"</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">buf</span> <span class="ruby-operator"><<</span> <span class="ruby-string">"\r\n"</span>
<span class="ruby-identifier">sock</span>.<span class="ruby-identifier">write</span> <span class="ruby-identifier">buf</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
</section>
</section>
</main>
<footer id="validator-badges" role="contentinfo">
<p><a href="https://validator.w3.org/check/referer">Validate</a>
<p>Generated by <a href="https://ruby.github.io/rdoc/">RDoc</a> 6.2.1.1.
<p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
</footer>