File: C:/Ruby27-x64/share/doc/ruby/html/Net/HTTP.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>class Net::HTTP - 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 class="nav-section">
<h3>Table of Contents</h3>
<ul class="link-list" role="directory">
<li><a href="#class-Net::HTTP-label-An+HTTP+client+API+for+Ruby.">An HTTP client API for Ruby.</a>
<li><a href="#class-Net::HTTP-label-Simple+Examples">Simple Examples</a>
<li><a href="#class-Net::HTTP-label-GET">GET</a>
<li><a href="#class-Net::HTTP-label-GET+by+URI">GET by URI</a>
<li><a href="#class-Net::HTTP-label-GET+with+Dynamic+Parameters">GET with Dynamic Parameters</a>
<li><a href="#class-Net::HTTP-label-POST">POST</a>
<li><a href="#class-Net::HTTP-label-POST+with+Multiple+Values">POST with Multiple Values</a>
<li><a href="#class-Net::HTTP-label-How+to+use+Net-3A-3AHTTP">How to use Net::HTTP</a>
<li><a href="#class-Net::HTTP-label-Response+Data">Response Data</a>
<li><a href="#class-Net::HTTP-label-Following+Redirection">Following Redirection</a>
<li><a href="#class-Net::HTTP-label-POST">POST</a>
<li><a href="#class-Net::HTTP-label-Setting+Headers">Setting Headers</a>
<li><a href="#class-Net::HTTP-label-Basic+Authentication">Basic Authentication</a>
<li><a href="#class-Net::HTTP-label-Streaming+Response+Bodies">Streaming Response Bodies</a>
<li><a href="#class-Net::HTTP-label-HTTPS">HTTPS</a>
<li><a href="#class-Net::HTTP-label-Proxies">Proxies</a>
<li><a href="#class-Net::HTTP-label-Compression">Compression</a>
<li><a href="#class-Net::HTTP-label-HTTP+Request+Classes">HTTP Request Classes</a>
<li><a href="#class-Net::HTTP-label-HTTP+Response+Classes">HTTP Response Classes</a>
</ul>
</div>
<div id="class-metadata">
<div id="parent-class-section" class="nav-section">
<h3>Parent</h3>
<p class="link">Protocol
</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-Proxy">::Proxy</a>
<li ><a href="#method-c-default_port">::default_port</a>
<li ><a href="#method-c-get">::get</a>
<li ><a href="#method-c-get_print">::get_print</a>
<li ><a href="#method-c-get_response">::get_response</a>
<li ><a href="#method-c-http_default_port">::http_default_port</a>
<li ><a href="#method-c-https_default_port">::https_default_port</a>
<li ><a href="#method-c-is_version_1_2-3F">::is_version_1_2?</a>
<li ><a href="#method-c-new">::new</a>
<li class="calls-super" ><a href="#method-c-new">::new</a>
<li ><a href="#method-c-newobj">::newobj</a>
<li ><a href="#method-c-post">::post</a>
<li ><a href="#method-c-post_form">::post_form</a>
<li ><a href="#method-c-proxy_class-3F">::proxy_class?</a>
<li ><a href="#method-c-start">::start</a>
<li ><a href="#method-c-version_1_2">::version_1_2</a>
<li ><a href="#method-c-version_1_2-3F">::version_1_2?</a>
<li ><a href="#method-i-D">#D</a>
<li ><a href="#method-i-active-3F">#active?</a>
<li ><a href="#method-i-addr_port">#addr_port</a>
<li ><a href="#method-i-begin_transport">#begin_transport</a>
<li ><a href="#method-i-connect">#connect</a>
<li ><a href="#method-i-continue_timeout-3D">#continue_timeout=</a>
<li ><a href="#method-i-copy">#copy</a>
<li ><a href="#method-i-delete">#delete</a>
<li ><a href="#method-i-do_finish">#do_finish</a>
<li ><a href="#method-i-do_start">#do_start</a>
<li ><a href="#method-i-edit_path">#edit_path</a>
<li ><a href="#method-i-end_transport">#end_transport</a>
<li ><a href="#method-i-finish">#finish</a>
<li ><a href="#method-i-get">#get</a>
<li ><a href="#method-i-get2">#get2</a>
<li ><a href="#method-i-head">#head</a>
<li ><a href="#method-i-head2">#head2</a>
<li ><a href="#method-i-inspect">#inspect</a>
<li ><a href="#method-i-ipaddr">#ipaddr</a>
<li ><a href="#method-i-ipaddr-3D">#ipaddr=</a>
<li ><a href="#method-i-keep_alive-3F">#keep_alive?</a>
<li ><a href="#method-i-lock">#lock</a>
<li ><a href="#method-i-max_retries-3D">#max_retries=</a>
<li ><a href="#method-i-mkcol">#mkcol</a>
<li ><a href="#method-i-move">#move</a>
<li ><a href="#method-i-on_connect">#on_connect</a>
<li ><a href="#method-i-options">#options</a>
<li ><a href="#method-i-patch">#patch</a>
<li ><a href="#method-i-peer_cert">#peer_cert</a>
<li ><a href="#method-i-post">#post</a>
<li ><a href="#method-i-post2">#post2</a>
<li ><a href="#method-i-propfind">#propfind</a>
<li ><a href="#method-i-proppatch">#proppatch</a>
<li ><a href="#method-i-proxy-3F">#proxy?</a>
<li ><a href="#method-i-proxy_address">#proxy_address</a>
<li ><a href="#method-i-proxy_from_env-3F">#proxy_from_env?</a>
<li ><a href="#method-i-proxy_pass">#proxy_pass</a>
<li ><a href="#method-i-proxy_port">#proxy_port</a>
<li ><a href="#method-i-proxy_user">#proxy_user</a>
<li ><a href="#method-i-proxyaddr">#proxyaddr</a>
<li ><a href="#method-i-proxyport">#proxyport</a>
<li ><a href="#method-i-read_timeout-3D">#read_timeout=</a>
<li ><a href="#method-i-request">#request</a>
<li ><a href="#method-i-request_get">#request_get</a>
<li ><a href="#method-i-request_head">#request_head</a>
<li ><a href="#method-i-request_post">#request_post</a>
<li ><a href="#method-i-send_entity">#send_entity</a>
<li ><a href="#method-i-send_request">#send_request</a>
<li ><a href="#method-i-set_debug_output">#set_debug_output</a>
<li ><a href="#method-i-sspi_auth">#sspi_auth</a>
<li ><a href="#method-i-sspi_auth-3F">#sspi_auth?</a>
<li ><a href="#method-i-start">#start</a>
<li ><a href="#method-i-started-3F">#started?</a>
<li ><a href="#method-i-trace">#trace</a>
<li ><a href="#method-i-transport_request">#transport_request</a>
<li ><a href="#method-i-unlock">#unlock</a>
<li ><a href="#method-i-use_ssl-3D">#use_ssl=</a>
<li ><a href="#method-i-use_ssl-3F">#use_ssl?</a>
<li ><a href="#method-i-write_timeout-3D">#write_timeout=</a>
</ul>
</div>
</div>
</nav>
<main role="main" aria-labelledby="class-Net::HTTP">
<h1 id="class-Net::HTTP" class="class">
class Net::HTTP
</h1>
<section class="description">
<h2 id="class-Net::HTTP-label-An+HTTP+client+API+for+Ruby.">An <a href="HTTP.html"><code>HTTP</code></a> client API for Ruby.<span><a href="#class-Net::HTTP-label-An+HTTP+client+API+for+Ruby.">¶</a> <a href="#top">↑</a></span></h2>
<p><a href="HTTP.html"><code>Net::HTTP</code></a> provides a rich library which can be used to build <a href="HTTP.html"><code>HTTP</code></a> user-agents. For more details about <a href="HTTP.html"><code>HTTP</code></a> see [RFC2616](<a href="http://www.ietf.org/rfc/rfc2616.txt">www.ietf.org/rfc/rfc2616.txt</a>).</p>
<p><a href="HTTP.html"><code>Net::HTTP</code></a> is designed to work closely with <a href="../URI.html"><code>URI</code></a>. <a href="../URI/Generic.html#attribute-i-host"><code>URI::HTTP#host</code></a>, <a href="../URI/Generic.html#attribute-i-port"><code>URI::HTTP#port</code></a> and <a href="../URI/HTTP.html#method-i-request_uri"><code>URI::HTTP#request_uri</code></a> are designed to work with <a href="HTTP.html"><code>Net::HTTP</code></a>.</p>
<p>If you are only performing a few GET requests you should try <a href="../OpenURI.html"><code>OpenURI</code></a>.</p>
<h2 id="class-Net::HTTP-label-Simple+Examples">Simple Examples<span><a href="#class-Net::HTTP-label-Simple+Examples">¶</a> <a href="#top">↑</a></span></h2>
<p>All examples assume you have loaded <a href="HTTP.html"><code>Net::HTTP</code></a> with:</p>
<pre class="ruby"><span class="ruby-identifier">require</span> <span class="ruby-string">'net/http'</span>
</pre>
<p>This will also require 'uri' so you don't need to require it separately.</p>
<p>The <a href="HTTP.html"><code>Net::HTTP</code></a> methods in the following section do not persist connections. They are not recommended if you are performing many <a href="HTTP.html"><code>HTTP</code></a> requests.</p>
<h3 id="class-Net::HTTP-label-GET">GET<span><a href="#class-Net::HTTP-label-GET">¶</a> <a href="#top">↑</a></span></h3>
<pre class="ruby"><span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTP</span>.<span class="ruby-identifier">get</span>(<span class="ruby-string">'example.com'</span>, <span class="ruby-string">'/index.html'</span>) <span class="ruby-comment"># => String</span>
</pre>
<h3 id="class-Net::HTTP-label-GET+by+URI">GET by <a href="../URI.html"><code>URI</code></a><span><a href="#class-Net::HTTP-label-GET+by+URI">¶</a> <a href="#top">↑</a></span></h3>
<pre class="ruby"><span class="ruby-identifier">uri</span> = <span class="ruby-constant">URI</span>(<span class="ruby-string">'http://example.com/index.html?count=10'</span>)
<span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTP</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">uri</span>) <span class="ruby-comment"># => String</span>
</pre>
<h3 id="class-Net::HTTP-label-GET+with+Dynamic+Parameters">GET with Dynamic Parameters<span><a href="#class-Net::HTTP-label-GET+with+Dynamic+Parameters">¶</a> <a href="#top">↑</a></span></h3>
<pre class="ruby"><span class="ruby-identifier">uri</span> = <span class="ruby-constant">URI</span>(<span class="ruby-string">'http://example.com/index.html'</span>)
<span class="ruby-identifier">params</span> = { <span class="ruby-value">:limit</span> <span class="ruby-operator">=></span> <span class="ruby-value">10</span>, <span class="ruby-value">:page</span> <span class="ruby-operator">=></span> <span class="ruby-value">3</span> }
<span class="ruby-identifier">uri</span>.<span class="ruby-identifier">query</span> = <span class="ruby-constant">URI</span>.<span class="ruby-identifier">encode_www_form</span>(<span class="ruby-identifier">params</span>)
<span class="ruby-identifier">res</span> = <span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTP</span>.<span class="ruby-identifier">get_response</span>(<span class="ruby-identifier">uri</span>)
<span class="ruby-identifier">puts</span> <span class="ruby-identifier">res</span>.<span class="ruby-identifier">body</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">res</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTPSuccess</span>)
</pre>
<h3 id="class-Net::HTTP-label-POST">POST<span><a href="#class-Net::HTTP-label-POST">¶</a> <a href="#top">↑</a></span></h3>
<pre class="ruby"><span class="ruby-identifier">uri</span> = <span class="ruby-constant">URI</span>(<span class="ruby-string">'http://www.example.com/search.cgi'</span>)
<span class="ruby-identifier">res</span> = <span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTP</span>.<span class="ruby-identifier">post_form</span>(<span class="ruby-identifier">uri</span>, <span class="ruby-string">'q'</span> <span class="ruby-operator">=></span> <span class="ruby-string">'ruby'</span>, <span class="ruby-string">'max'</span> <span class="ruby-operator">=></span> <span class="ruby-string">'50'</span>)
<span class="ruby-identifier">puts</span> <span class="ruby-identifier">res</span>.<span class="ruby-identifier">body</span>
</pre>
<h3 id="class-Net::HTTP-label-POST+with+Multiple+Values">POST with Multiple Values<span><a href="#class-Net::HTTP-label-POST+with+Multiple+Values">¶</a> <a href="#top">↑</a></span></h3>
<pre class="ruby"><span class="ruby-identifier">uri</span> = <span class="ruby-constant">URI</span>(<span class="ruby-string">'http://www.example.com/search.cgi'</span>)
<span class="ruby-identifier">res</span> = <span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTP</span>.<span class="ruby-identifier">post_form</span>(<span class="ruby-identifier">uri</span>, <span class="ruby-string">'q'</span> <span class="ruby-operator">=></span> [<span class="ruby-string">'ruby'</span>, <span class="ruby-string">'perl'</span>], <span class="ruby-string">'max'</span> <span class="ruby-operator">=></span> <span class="ruby-string">'50'</span>)
<span class="ruby-identifier">puts</span> <span class="ruby-identifier">res</span>.<span class="ruby-identifier">body</span>
</pre>
<h2 id="class-Net::HTTP-label-How+to+use+Net-3A-3AHTTP">How to use <a href="HTTP.html"><code>Net::HTTP</code></a><span><a href="#class-Net::HTTP-label-How+to+use+Net-3A-3AHTTP">¶</a> <a href="#top">↑</a></span></h2>
<p>The following example code can be used as the basis of an <a href="HTTP.html"><code>HTTP</code></a> user-agent which can perform a variety of request types using persistent connections.</p>
<pre class="ruby"><span class="ruby-identifier">uri</span> = <span class="ruby-constant">URI</span>(<span class="ruby-string">'http://example.com/some_path?query=string'</span>)
<span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTP</span>.<span class="ruby-identifier">start</span>(<span class="ruby-identifier">uri</span>.<span class="ruby-identifier">host</span>, <span class="ruby-identifier">uri</span>.<span class="ruby-identifier">port</span>) <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">http</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">request</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">Get</span>.<span class="ruby-identifier">new</span> <span class="ruby-identifier">uri</span>
<span class="ruby-identifier">response</span> = <span class="ruby-identifier">http</span>.<span class="ruby-identifier">request</span> <span class="ruby-identifier">request</span> <span class="ruby-comment"># Net::HTTPResponse object</span>
<span class="ruby-keyword">end</span>
</pre>
<p><a href="HTTP.html#method-c-start"><code>Net::HTTP::start</code></a> immediately creates a connection to an <a href="HTTP.html"><code>HTTP</code></a> server which is kept open for the duration of the block. The connection will remain open for multiple requests in the block if the server indicates it supports persistent connections.</p>
<p>If you wish to re-use a connection across multiple <a href="HTTP.html"><code>HTTP</code></a> requests without automatically closing it you can use <a href="HTTP.html#method-c-new"><code>::new</code></a> and then call <a href="HTTP.html#method-i-start"><code>start</code></a> and <a href="HTTP.html#method-i-finish"><code>finish</code></a> manually.</p>
<p>The request types <a href="HTTP.html"><code>Net::HTTP</code></a> supports are listed below in the section “HTTP Request Classes”.</p>
<p>For all the <a href="HTTP.html"><code>Net::HTTP</code></a> request objects and shortcut request methods you may supply either a <a href="../String.html"><code>String</code></a> for the request path or a <a href="../URI.html"><code>URI</code></a> from which <a href="HTTP.html"><code>Net::HTTP</code></a> will extract the request path.</p>
<h3 id="class-Net::HTTP-label-Response+Data">Response <a href="../Data.html"><code>Data</code></a><span><a href="#class-Net::HTTP-label-Response+Data">¶</a> <a href="#top">↑</a></span></h3>
<pre class="ruby"><span class="ruby-identifier">uri</span> = <span class="ruby-constant">URI</span>(<span class="ruby-string">'http://example.com/index.html'</span>)
<span class="ruby-identifier">res</span> = <span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTP</span>.<span class="ruby-identifier">get_response</span>(<span class="ruby-identifier">uri</span>)
<span class="ruby-comment"># Headers</span>
<span class="ruby-identifier">res</span>[<span class="ruby-string">'Set-Cookie'</span>] <span class="ruby-comment"># => String</span>
<span class="ruby-identifier">res</span>.<span class="ruby-identifier">get_fields</span>(<span class="ruby-string">'set-cookie'</span>) <span class="ruby-comment"># => Array</span>
<span class="ruby-identifier">res</span>.<span class="ruby-identifier">to_hash</span>[<span class="ruby-string">'set-cookie'</span>] <span class="ruby-comment"># => Array</span>
<span class="ruby-identifier">puts</span> <span class="ruby-node">"Headers: #{res.to_hash.inspect}"</span>
<span class="ruby-comment"># Status</span>
<span class="ruby-identifier">puts</span> <span class="ruby-identifier">res</span>.<span class="ruby-identifier">code</span> <span class="ruby-comment"># => '200'</span>
<span class="ruby-identifier">puts</span> <span class="ruby-identifier">res</span>.<span class="ruby-identifier">message</span> <span class="ruby-comment"># => 'OK'</span>
<span class="ruby-identifier">puts</span> <span class="ruby-identifier">res</span>.<span class="ruby-identifier">class</span>.<span class="ruby-identifier">name</span> <span class="ruby-comment"># => 'HTTPOK'</span>
<span class="ruby-comment"># Body</span>
<span class="ruby-identifier">puts</span> <span class="ruby-identifier">res</span>.<span class="ruby-identifier">body</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">res</span>.<span class="ruby-identifier">response_body_permitted?</span>
</pre>
<h3 id="class-Net::HTTP-label-Following+Redirection">Following Redirection<span><a href="#class-Net::HTTP-label-Following+Redirection">¶</a> <a href="#top">↑</a></span></h3>
<p>Each <a href="HTTPResponse.html"><code>Net::HTTPResponse</code></a> object belongs to a class for its response code.</p>
<p>For example, all 2XX responses are instances of a <a href="HTTPSuccess.html"><code>Net::HTTPSuccess</code></a> subclass, a 3XX response is an instance of a <a href="HTTPRedirection.html"><code>Net::HTTPRedirection</code></a> subclass and a 200 response is an instance of the <a href="HTTPOK.html"><code>Net::HTTPOK</code></a> class. For details of response classes, see the section “HTTP Response Classes” below.</p>
<p>Using a case statement you can handle various types of responses properly:</p>
<pre class="ruby"><span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">fetch</span>(<span class="ruby-identifier">uri_str</span>, <span class="ruby-identifier">limit</span> = <span class="ruby-value">10</span>)
<span class="ruby-comment"># You should choose a better exception.</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-string">'too many HTTP redirects'</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">limit</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
<span class="ruby-identifier">response</span> = <span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTP</span>.<span class="ruby-identifier">get_response</span>(<span class="ruby-constant">URI</span>(<span class="ruby-identifier">uri_str</span>))
<span class="ruby-keyword">case</span> <span class="ruby-identifier">response</span>
<span class="ruby-keyword">when</span> <span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTPSuccess</span> <span class="ruby-keyword">then</span>
<span class="ruby-identifier">response</span>
<span class="ruby-keyword">when</span> <span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTPRedirection</span> <span class="ruby-keyword">then</span>
<span class="ruby-identifier">location</span> = <span class="ruby-identifier">response</span>[<span class="ruby-string">'location'</span>]
<span class="ruby-identifier">warn</span> <span class="ruby-node">"redirected to #{location}"</span>
<span class="ruby-identifier">fetch</span>(<span class="ruby-identifier">location</span>, <span class="ruby-identifier">limit</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>)
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">response</span>.<span class="ruby-identifier">value</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">print</span> <span class="ruby-identifier">fetch</span>(<span class="ruby-string">'http://www.ruby-lang.org'</span>)
</pre>
<h3 id="class-Net::HTTP-label-POST">POST<span><a href="#class-Net::HTTP-label-POST">¶</a> <a href="#top">↑</a></span></h3>
<p>A POST can be made using the <a href="HTTP/Post.html"><code>Net::HTTP::Post</code></a> request class. This example creates a URL encoded POST body:</p>
<pre class="ruby"><span class="ruby-identifier">uri</span> = <span class="ruby-constant">URI</span>(<span class="ruby-string">'http://www.example.com/todo.cgi'</span>)
<span class="ruby-identifier">req</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">Post</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">uri</span>)
<span class="ruby-identifier">req</span>.<span class="ruby-identifier">set_form_data</span>(<span class="ruby-string">'from'</span> <span class="ruby-operator">=></span> <span class="ruby-string">'2005-01-01'</span>, <span class="ruby-string">'to'</span> <span class="ruby-operator">=></span> <span class="ruby-string">'2005-03-31'</span>)
<span class="ruby-identifier">res</span> = <span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTP</span>.<span class="ruby-identifier">start</span>(<span class="ruby-identifier">uri</span>.<span class="ruby-identifier">hostname</span>, <span class="ruby-identifier">uri</span>.<span class="ruby-identifier">port</span>) <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">http</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">http</span>.<span class="ruby-identifier">request</span>(<span class="ruby-identifier">req</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">case</span> <span class="ruby-identifier">res</span>
<span class="ruby-keyword">when</span> <span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTPSuccess</span>, <span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTPRedirection</span>
<span class="ruby-comment"># OK</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">res</span>.<span class="ruby-identifier">value</span>
<span class="ruby-keyword">end</span>
</pre>
<p>To send multipart/form-data use <a href="HTTPHeader.html#method-i-set_form"><code>Net::HTTPHeader#set_form</code></a>:</p>
<pre class="ruby"><span class="ruby-identifier">req</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">Post</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">uri</span>)
<span class="ruby-identifier">req</span>.<span class="ruby-identifier">set_form</span>([[<span class="ruby-string">'upload'</span>, <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-string">'foo.bar'</span>)]], <span class="ruby-string">'multipart/form-data'</span>)
</pre>
<p>Other requests that can contain a body such as PUT can be created in the same way using the corresponding request class (<a href="HTTP/Put.html"><code>Net::HTTP::Put</code></a>).</p>
<h3 id="class-Net::HTTP-label-Setting+Headers">Setting Headers<span><a href="#class-Net::HTTP-label-Setting+Headers">¶</a> <a href="#top">↑</a></span></h3>
<p>The following example performs a conditional GET using the If-Modified-Since header. If the files has not been modified since the time in the header a Not Modified response will be returned. See RFC 2616 section 9.3 for further details.</p>
<pre class="ruby"><span class="ruby-identifier">uri</span> = <span class="ruby-constant">URI</span>(<span class="ruby-string">'http://example.com/cached_response'</span>)
<span class="ruby-identifier">file</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">stat</span> <span class="ruby-string">'cached_response'</span>
<span class="ruby-identifier">req</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">Get</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">uri</span>)
<span class="ruby-identifier">req</span>[<span class="ruby-string">'If-Modified-Since'</span>] = <span class="ruby-identifier">file</span>.<span class="ruby-identifier">mtime</span>.<span class="ruby-identifier">rfc2822</span>
<span class="ruby-identifier">res</span> = <span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTP</span>.<span class="ruby-identifier">start</span>(<span class="ruby-identifier">uri</span>.<span class="ruby-identifier">hostname</span>, <span class="ruby-identifier">uri</span>.<span class="ruby-identifier">port</span>) {<span class="ruby-operator">|</span><span class="ruby-identifier">http</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">http</span>.<span class="ruby-identifier">request</span>(<span class="ruby-identifier">req</span>)
}
<span class="ruby-identifier">open</span> <span class="ruby-string">'cached_response'</span>, <span class="ruby-string">'w'</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">io</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">io</span>.<span class="ruby-identifier">write</span> <span class="ruby-identifier">res</span>.<span class="ruby-identifier">body</span>
<span class="ruby-keyword">end</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">res</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTPSuccess</span>)
</pre>
<h3 id="class-Net::HTTP-label-Basic+Authentication">Basic Authentication<span><a href="#class-Net::HTTP-label-Basic+Authentication">¶</a> <a href="#top">↑</a></span></h3>
<p>Basic authentication is performed according to [RFC2617](<a href="http://www.ietf.org/rfc/rfc2617.txt">www.ietf.org/rfc/rfc2617.txt</a>).</p>
<pre class="ruby"><span class="ruby-identifier">uri</span> = <span class="ruby-constant">URI</span>(<span class="ruby-string">'http://example.com/index.html?key=value'</span>)
<span class="ruby-identifier">req</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">Get</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">uri</span>)
<span class="ruby-identifier">req</span>.<span class="ruby-identifier">basic_auth</span> <span class="ruby-string">'user'</span>, <span class="ruby-string">'pass'</span>
<span class="ruby-identifier">res</span> = <span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTP</span>.<span class="ruby-identifier">start</span>(<span class="ruby-identifier">uri</span>.<span class="ruby-identifier">hostname</span>, <span class="ruby-identifier">uri</span>.<span class="ruby-identifier">port</span>) {<span class="ruby-operator">|</span><span class="ruby-identifier">http</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">http</span>.<span class="ruby-identifier">request</span>(<span class="ruby-identifier">req</span>)
}
<span class="ruby-identifier">puts</span> <span class="ruby-identifier">res</span>.<span class="ruby-identifier">body</span>
</pre>
<h3 id="class-Net::HTTP-label-Streaming+Response+Bodies">Streaming Response Bodies<span><a href="#class-Net::HTTP-label-Streaming+Response+Bodies">¶</a> <a href="#top">↑</a></span></h3>
<p>By default <a href="HTTP.html"><code>Net::HTTP</code></a> reads an entire response into memory. If you are handling large files or wish to implement a progress bar you can instead stream the body directly to an <a href="../IO.html"><code>IO</code></a>.</p>
<pre class="ruby"><span class="ruby-identifier">uri</span> = <span class="ruby-constant">URI</span>(<span class="ruby-string">'http://example.com/large_file'</span>)
<span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTP</span>.<span class="ruby-identifier">start</span>(<span class="ruby-identifier">uri</span>.<span class="ruby-identifier">host</span>, <span class="ruby-identifier">uri</span>.<span class="ruby-identifier">port</span>) <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">http</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">request</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">Get</span>.<span class="ruby-identifier">new</span> <span class="ruby-identifier">uri</span>
<span class="ruby-identifier">http</span>.<span class="ruby-identifier">request</span> <span class="ruby-identifier">request</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">response</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">open</span> <span class="ruby-string">'large_file'</span>, <span class="ruby-string">'w'</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">io</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">response</span>.<span class="ruby-identifier">read_body</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">chunk</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">io</span>.<span class="ruby-identifier">write</span> <span class="ruby-identifier">chunk</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>
<h3 id="class-Net::HTTP-label-HTTPS">HTTPS<span><a href="#class-Net::HTTP-label-HTTPS">¶</a> <a href="#top">↑</a></span></h3>
<p>HTTPS is enabled for an <a href="HTTP.html"><code>HTTP</code></a> connection by <a href="HTTP.html#method-i-use_ssl-3D"><code>Net::HTTP#use_ssl=</code></a>.</p>
<pre class="ruby"><span class="ruby-identifier">uri</span> = <span class="ruby-constant">URI</span>(<span class="ruby-string">'https://secure.example.com/some_path?query=string'</span>)
<span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTP</span>.<span class="ruby-identifier">start</span>(<span class="ruby-identifier">uri</span>.<span class="ruby-identifier">host</span>, <span class="ruby-identifier">uri</span>.<span class="ruby-identifier">port</span>, <span class="ruby-value">:use_ssl</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">true</span>) <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">http</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">request</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">Get</span>.<span class="ruby-identifier">new</span> <span class="ruby-identifier">uri</span>
<span class="ruby-identifier">response</span> = <span class="ruby-identifier">http</span>.<span class="ruby-identifier">request</span> <span class="ruby-identifier">request</span> <span class="ruby-comment"># Net::HTTPResponse object</span>
<span class="ruby-keyword">end</span>
</pre>
<p>Or if you simply want to make a GET request, you may pass in an <a href="../URI.html"><code>URI</code></a> object that has an HTTPS URL. <a href="HTTP.html"><code>Net::HTTP</code></a> automatically turns on TLS verification if the <a href="../URI.html"><code>URI</code></a> object has a 'https' <a href="../URI.html"><code>URI</code></a> scheme.</p>
<pre class="ruby"><span class="ruby-identifier">uri</span> = <span class="ruby-constant">URI</span>(<span class="ruby-string">'https://example.com/'</span>)
<span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTP</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">uri</span>) <span class="ruby-comment"># => String</span>
</pre>
<p>In previous versions of Ruby you would need to require 'net/https' to use HTTPS. This is no longer true.</p>
<h3 id="class-Net::HTTP-label-Proxies">Proxies<span><a href="#class-Net::HTTP-label-Proxies">¶</a> <a href="#top">↑</a></span></h3>
<p><a href="HTTP.html"><code>Net::HTTP</code></a> will automatically create a proxy from the <code>http_proxy</code> environment variable if it is present. To disable use of <code>http_proxy</code>, pass <code>nil</code> for the proxy address.</p>
<p>You may also create a custom proxy:</p>
<pre class="ruby"><span class="ruby-identifier">proxy_addr</span> = <span class="ruby-string">'your.proxy.host'</span>
<span class="ruby-identifier">proxy_port</span> = <span class="ruby-value">8080</span>
<span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTP</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">'example.com'</span>, <span class="ruby-keyword">nil</span>, <span class="ruby-identifier">proxy_addr</span>, <span class="ruby-identifier">proxy_port</span>).<span class="ruby-identifier">start</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">http</span><span class="ruby-operator">|</span>
<span class="ruby-comment"># always proxy via your.proxy.addr:8080</span>
}
</pre>
<p>See <a href="HTTP.html#method-c-new"><code>Net::HTTP.new</code></a> for further details and examples such as proxies that require a username and password.</p>
<h3 id="class-Net::HTTP-label-Compression">Compression<span><a href="#class-Net::HTTP-label-Compression">¶</a> <a href="#top">↑</a></span></h3>
<p><a href="HTTP.html"><code>Net::HTTP</code></a> automatically adds Accept-Encoding for compression of response bodies and automatically decompresses gzip and deflate responses unless a <a href="../Range.html"><code>Range</code></a> header was sent.</p>
<p>Compression can be disabled through the Accept-Encoding: identity header.</p>
<h2 id="class-Net::HTTP-label-HTTP+Request+Classes"><a href="HTTP.html"><code>HTTP</code></a> Request Classes<span><a href="#class-Net::HTTP-label-HTTP+Request+Classes">¶</a> <a href="#top">↑</a></span></h2>
<p>Here is the <a href="HTTP.html"><code>HTTP</code></a> request class hierarchy.</p>
<ul><li>
<p><a href="HTTPRequest.html"><code>Net::HTTPRequest</code></a></p>
<ul><li>
<p><a href="HTTP/Get.html"><code>Net::HTTP::Get</code></a></p>
</li><li>
<p><a href="HTTP/Head.html"><code>Net::HTTP::Head</code></a></p>
</li><li>
<p><a href="HTTP/Post.html"><code>Net::HTTP::Post</code></a></p>
</li><li>
<p><a href="HTTP/Patch.html"><code>Net::HTTP::Patch</code></a></p>
</li><li>
<p><a href="HTTP/Put.html"><code>Net::HTTP::Put</code></a></p>
</li><li>
<p><a href="HTTP/Proppatch.html"><code>Net::HTTP::Proppatch</code></a></p>
</li><li>
<p><a href="HTTP/Lock.html"><code>Net::HTTP::Lock</code></a></p>
</li><li>
<p><a href="HTTP/Unlock.html"><code>Net::HTTP::Unlock</code></a></p>
</li><li>
<p><a href="HTTP/Options.html"><code>Net::HTTP::Options</code></a></p>
</li><li>
<p><a href="HTTP/Propfind.html"><code>Net::HTTP::Propfind</code></a></p>
</li><li>
<p><a href="HTTP/Delete.html"><code>Net::HTTP::Delete</code></a></p>
</li><li>
<p><a href="HTTP/Move.html"><code>Net::HTTP::Move</code></a></p>
</li><li>
<p><a href="HTTP/Copy.html"><code>Net::HTTP::Copy</code></a></p>
</li><li>
<p><a href="HTTP/Mkcol.html"><code>Net::HTTP::Mkcol</code></a></p>
</li><li>
<p><a href="HTTP/Trace.html"><code>Net::HTTP::Trace</code></a></p>
</li></ul>
</li></ul>
<h2 id="class-Net::HTTP-label-HTTP+Response+Classes"><a href="HTTP.html"><code>HTTP</code></a> Response Classes<span><a href="#class-Net::HTTP-label-HTTP+Response+Classes">¶</a> <a href="#top">↑</a></span></h2>
<p>Here is <a href="HTTP.html"><code>HTTP</code></a> response class hierarchy. All classes are defined in <a href="../Net.html"><code>Net</code></a> module and are subclasses of <a href="HTTPResponse.html"><code>Net::HTTPResponse</code></a>.</p>
<dl class="rdoc-list note-list"><dt><a href="HTTPUnknownResponse.html"><code>HTTPUnknownResponse</code></a>
<dd>
<p>For unhandled <a href="HTTP.html"><code>HTTP</code></a> extensions</p>
</dd><dt><a href="HTTPInformation.html"><code>HTTPInformation</code></a>
<dd>
<p>1xx</p>
</dd><dt><a href="HTTPContinue.html"><code>HTTPContinue</code></a>
<dd>
<p>100</p>
</dd><dt><a href="HTTPSwitchProtocol.html"><code>HTTPSwitchProtocol</code></a>
<dd>
<p>101</p>
</dd><dt><a href="HTTPSuccess.html"><code>HTTPSuccess</code></a>
<dd>
<p>2xx</p>
</dd><dt><a href="HTTPOK.html"><code>HTTPOK</code></a>
<dd>
<p>200</p>
</dd><dt><a href="HTTPCreated.html"><code>HTTPCreated</code></a>
<dd>
<p>201</p>
</dd><dt><a href="HTTPAccepted.html"><code>HTTPAccepted</code></a>
<dd>
<p>202</p>
</dd><dt><a href="HTTPNonAuthoritativeInformation.html"><code>HTTPNonAuthoritativeInformation</code></a>
<dd>
<p>203</p>
</dd><dt><a href="HTTPNoContent.html"><code>HTTPNoContent</code></a>
<dd>
<p>204</p>
</dd><dt><a href="HTTPResetContent.html"><code>HTTPResetContent</code></a>
<dd>
<p>205</p>
</dd><dt><a href="HTTPPartialContent.html"><code>HTTPPartialContent</code></a>
<dd>
<p>206</p>
</dd><dt><a href="HTTPMultiStatus.html"><code>HTTPMultiStatus</code></a>
<dd>
<p>207</p>
</dd><dt><a href="HTTPIMUsed.html"><code>HTTPIMUsed</code></a>
<dd>
<p>226</p>
</dd><dt><a href="HTTPRedirection.html"><code>HTTPRedirection</code></a>
<dd>
<p>3xx</p>
</dd><dt><a href="HTTPMultipleChoices.html"><code>HTTPMultipleChoices</code></a>
<dd>
<p>300</p>
</dd><dt><a href="HTTPMovedPermanently.html"><code>HTTPMovedPermanently</code></a>
<dd>
<p>301</p>
</dd><dt><a href="HTTPFound.html"><code>HTTPFound</code></a>
<dd>
<p>302</p>
</dd><dt><a href="HTTPSeeOther.html"><code>HTTPSeeOther</code></a>
<dd>
<p>303</p>
</dd><dt><a href="HTTPNotModified.html"><code>HTTPNotModified</code></a>
<dd>
<p>304</p>
</dd><dt><a href="HTTPUseProxy.html"><code>HTTPUseProxy</code></a>
<dd>
<p>305</p>
</dd><dt><a href="HTTPTemporaryRedirect.html"><code>HTTPTemporaryRedirect</code></a>
<dd>
<p>307</p>
</dd><dt><a href="HTTPClientError.html"><code>HTTPClientError</code></a>
<dd>
<p>4xx</p>
</dd><dt><a href="HTTPBadRequest.html"><code>HTTPBadRequest</code></a>
<dd>
<p>400</p>
</dd><dt><a href="HTTPUnauthorized.html"><code>HTTPUnauthorized</code></a>
<dd>
<p>401</p>
</dd><dt><a href="HTTPPaymentRequired.html"><code>HTTPPaymentRequired</code></a>
<dd>
<p>402</p>
</dd><dt><a href="HTTPForbidden.html"><code>HTTPForbidden</code></a>
<dd>
<p>403</p>
</dd><dt><a href="HTTPNotFound.html"><code>HTTPNotFound</code></a>
<dd>
<p>404</p>
</dd><dt><a href="HTTPMethodNotAllowed.html"><code>HTTPMethodNotAllowed</code></a>
<dd>
<p>405</p>
</dd><dt><a href="HTTPNotAcceptable.html"><code>HTTPNotAcceptable</code></a>
<dd>
<p>406</p>
</dd><dt><a href="HTTPProxyAuthenticationRequired.html"><code>HTTPProxyAuthenticationRequired</code></a>
<dd>
<p>407</p>
</dd><dt><a href="HTTPRequestTimeout.html"><code>HTTPRequestTimeOut</code></a>
<dd>
<p>408</p>
</dd><dt><a href="HTTPConflict.html"><code>HTTPConflict</code></a>
<dd>
<p>409</p>
</dd><dt><a href="HTTPGone.html"><code>HTTPGone</code></a>
<dd>
<p>410</p>
</dd><dt><a href="HTTPLengthRequired.html"><code>HTTPLengthRequired</code></a>
<dd>
<p>411</p>
</dd><dt><a href="HTTPPreconditionFailed.html"><code>HTTPPreconditionFailed</code></a>
<dd>
<p>412</p>
</dd><dt><a href="HTTPPayloadTooLarge.html"><code>HTTPRequestEntityTooLarge</code></a>
<dd>
<p>413</p>
</dd><dt><a href="HTTPURITooLong.html"><code>HTTPRequestURITooLong</code></a>
<dd>
<p>414</p>
</dd><dt><a href="HTTPUnsupportedMediaType.html"><code>HTTPUnsupportedMediaType</code></a>
<dd>
<p>415</p>
</dd><dt><a href="HTTPRangeNotSatisfiable.html"><code>HTTPRequestedRangeNotSatisfiable</code></a>
<dd>
<p>416</p>
</dd><dt><a href="HTTPExpectationFailed.html"><code>HTTPExpectationFailed</code></a>
<dd>
<p>417</p>
</dd><dt><a href="HTTPUnprocessableEntity.html"><code>HTTPUnprocessableEntity</code></a>
<dd>
<p>422</p>
</dd><dt><a href="HTTPLocked.html"><code>HTTPLocked</code></a>
<dd>
<p>423</p>
</dd><dt><a href="HTTPFailedDependency.html"><code>HTTPFailedDependency</code></a>
<dd>
<p>424</p>
</dd><dt><a href="HTTPUpgradeRequired.html"><code>HTTPUpgradeRequired</code></a>
<dd>
<p>426</p>
</dd><dt><a href="HTTPPreconditionRequired.html"><code>HTTPPreconditionRequired</code></a>
<dd>
<p>428</p>
</dd><dt><a href="HTTPTooManyRequests.html"><code>HTTPTooManyRequests</code></a>
<dd>
<p>429</p>
</dd><dt><a href="HTTPRequestHeaderFieldsTooLarge.html"><code>HTTPRequestHeaderFieldsTooLarge</code></a>
<dd>
<p>431</p>
</dd><dt><a href="HTTPUnavailableForLegalReasons.html"><code>HTTPUnavailableForLegalReasons</code></a>
<dd>
<p>451</p>
</dd><dt><a href="HTTPServerError.html"><code>HTTPServerError</code></a>
<dd>
<p>5xx</p>
</dd><dt><a href="HTTPInternalServerError.html"><code>HTTPInternalServerError</code></a>
<dd>
<p>500</p>
</dd><dt><a href="HTTPNotImplemented.html"><code>HTTPNotImplemented</code></a>
<dd>
<p>501</p>
</dd><dt><a href="HTTPBadGateway.html"><code>HTTPBadGateway</code></a>
<dd>
<p>502</p>
</dd><dt><a href="HTTPServiceUnavailable.html"><code>HTTPServiceUnavailable</code></a>
<dd>
<p>503</p>
</dd><dt><a href="HTTPGatewayTimeout.html"><code>HTTPGatewayTimeOut</code></a>
<dd>
<p>504</p>
</dd><dt><a href="HTTPVersionNotSupported.html"><code>HTTPVersionNotSupported</code></a>
<dd>
<p>505</p>
</dd><dt><a href="HTTPInsufficientStorage.html"><code>HTTPInsufficientStorage</code></a>
<dd>
<p>507</p>
</dd><dt><a href="HTTPNetworkAuthenticationRequired.html"><code>HTTPNetworkAuthenticationRequired</code></a>
<dd>
<p>511</p>
</dd></dl>
<p>There is also the Net::HTTPBadResponse exception which is raised when there is a protocol error.</p>
</section>
<section id="5Buntitled-5D" class="documentation-section">
<section class="constants-list">
<header>
<h3>Constants</h3>
</header>
<dl>
<dt id="ENVIRONMENT_VARIABLE_IS_MULTIUSER_SAFE">ENVIRONMENT_VARIABLE_IS_MULTIUSER_SAFE
<dd>
<dt id="SSL_ATTRIBUTES">SSL_ATTRIBUTES
<dd>
<dt id="SSL_IVNAMES">SSL_IVNAMES
<dd>
<dt id="STATUS_CODES">STATUS_CODES
<dd>
</dl>
</section>
<section class="attribute-method-details" class="method-section">
<header>
<h3>Attributes</h3>
</header>
<div id="attribute-c-proxy_address" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">proxy_address</span><span
class="attribute-access-type">[R]</span>
</div>
<div class="method-description">
<p>Address of proxy host. If <a href="HTTP.html"><code>Net::HTTP</code></a> does not use a proxy, nil.</p>
</div>
</div>
<div id="attribute-c-proxy_pass" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">proxy_pass</span><span
class="attribute-access-type">[R]</span>
</div>
<div class="method-description">
<p>User password for accessing proxy. If <a href="HTTP.html"><code>Net::HTTP</code></a> does not use a proxy, nil.</p>
</div>
</div>
<div id="attribute-c-proxy_port" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">proxy_port</span><span
class="attribute-access-type">[R]</span>
</div>
<div class="method-description">
<p>Port number of proxy host. If <a href="HTTP.html"><code>Net::HTTP</code></a> does not use a proxy, nil.</p>
</div>
</div>
<div id="attribute-c-proxy_user" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">proxy_user</span><span
class="attribute-access-type">[R]</span>
</div>
<div class="method-description">
<p>User name for accessing proxy. If <a href="HTTP.html"><code>Net::HTTP</code></a> does not use a proxy, nil.</p>
</div>
</div>
<div id="attribute-i-address" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">address</span><span
class="attribute-access-type">[R]</span>
</div>
<div class="method-description">
<p>The DNS host name or IP address to connect to.</p>
</div>
</div>
<div id="attribute-i-ca_file" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">ca_file</span><span
class="attribute-access-type">[RW]</span>
</div>
<div class="method-description">
<p>Sets path of a CA certification file in PEM format.</p>
<p>The file can contain several CA certificates.</p>
</div>
</div>
<div id="attribute-i-ca_path" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">ca_path</span><span
class="attribute-access-type">[RW]</span>
</div>
<div class="method-description">
<p>Sets path of a CA certification directory containing certifications in PEM format.</p>
</div>
</div>
<div id="attribute-i-cert" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">cert</span><span
class="attribute-access-type">[RW]</span>
</div>
<div class="method-description">
<p>Sets an <a href="../OpenSSL/X509/Certificate.html"><code>OpenSSL::X509::Certificate</code></a> object as client certificate. (This method is appeared in Michal Rokos's <a href="../OpenSSL.html"><code>OpenSSL</code></a> extension).</p>
</div>
</div>
<div id="attribute-i-cert_store" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">cert_store</span><span
class="attribute-access-type">[RW]</span>
</div>
<div class="method-description">
<p>Sets the X509::Store to verify peer certificate.</p>
</div>
</div>
<div id="attribute-i-ciphers" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">ciphers</span><span
class="attribute-access-type">[RW]</span>
</div>
<div class="method-description">
<p>Sets the available ciphers. See <a href="../OpenSSL/SSL/SSLContext.html#method-i-ciphers-3D"><code>OpenSSL::SSL::SSLContext#ciphers=</code></a></p>
</div>
</div>
<div id="attribute-i-close_on_empty_response" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">close_on_empty_response</span><span
class="attribute-access-type">[RW]</span>
</div>
<div class="method-description">
</div>
</div>
<div id="attribute-i-continue_timeout" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">continue_timeout</span><span
class="attribute-access-type">[R]</span>
</div>
<div class="method-description">
<p>Seconds to wait for 100 Continue response. If the <a href="HTTP.html"><code>HTTP</code></a> object does not receive a response in this many seconds it sends the request body. The default value is <code>nil</code>.</p>
</div>
</div>
<div id="attribute-i-keep_alive_timeout" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">keep_alive_timeout</span><span
class="attribute-access-type">[RW]</span>
</div>
<div class="method-description">
<p>Seconds to reuse the connection of the previous request. If the idle time is less than this Keep-Alive <a href="../Timeout.html"><code>Timeout</code></a>, <a href="HTTP.html"><code>Net::HTTP</code></a> reuses the TCP/IP socket used by the previous communication. The default value is 2 seconds.</p>
</div>
</div>
<div id="attribute-i-key" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">key</span><span
class="attribute-access-type">[RW]</span>
</div>
<div class="method-description">
<p>Sets an <a href="../OpenSSL/PKey/RSA.html"><code>OpenSSL::PKey::RSA</code></a> or <a href="../OpenSSL/PKey/DSA.html"><code>OpenSSL::PKey::DSA</code></a> object. (This method is appeared in Michal Rokos's <a href="../OpenSSL.html"><code>OpenSSL</code></a> extension.)</p>
</div>
</div>
<div id="attribute-i-local_host" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">local_host</span><span
class="attribute-access-type">[RW]</span>
</div>
<div class="method-description">
<p>The local host used to establish the connection.</p>
</div>
</div>
<div id="attribute-i-local_port" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">local_port</span><span
class="attribute-access-type">[RW]</span>
</div>
<div class="method-description">
<p>The local port used to establish the connection.</p>
</div>
</div>
<div id="attribute-i-max_retries" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">max_retries</span><span
class="attribute-access-type">[R]</span>
</div>
<div class="method-description">
</div>
</div>
<div id="attribute-i-max_version" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">max_version</span><span
class="attribute-access-type">[RW]</span>
</div>
<div class="method-description">
<p>Sets the maximum SSL version. See <a href="../OpenSSL/SSL/SSLContext.html#method-i-max_version-3D"><code>OpenSSL::SSL::SSLContext#max_version=</code></a></p>
</div>
</div>
<div id="attribute-i-min_version" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">min_version</span><span
class="attribute-access-type">[RW]</span>
</div>
<div class="method-description">
<p>Sets the minimum SSL version. See <a href="../OpenSSL/SSL/SSLContext.html#method-i-min_version-3D"><code>OpenSSL::SSL::SSLContext#min_version=</code></a></p>
</div>
</div>
<div id="attribute-i-open_timeout" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">open_timeout</span><span
class="attribute-access-type">[RW]</span>
</div>
<div class="method-description">
<p>Number of seconds to wait for the connection to open. Any number may be used, including Floats for fractional seconds. If the <a href="HTTP.html"><code>HTTP</code></a> object cannot open a connection in this many seconds, it raises a <a href="OpenTimeout.html"><code>Net::OpenTimeout</code></a> exception. The default value is 60 seconds.</p>
</div>
</div>
<div id="attribute-i-port" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">port</span><span
class="attribute-access-type">[R]</span>
</div>
<div class="method-description">
<p>The port number to connect to.</p>
</div>
</div>
<div id="attribute-i-proxy_address" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">proxy_address</span><span
class="attribute-access-type">[W]</span>
</div>
<div class="method-description">
</div>
</div>
<div id="attribute-i-proxy_from_env" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">proxy_from_env</span><span
class="attribute-access-type">[W]</span>
</div>
<div class="method-description">
</div>
</div>
<div id="attribute-i-proxy_pass" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">proxy_pass</span><span
class="attribute-access-type">[W]</span>
</div>
<div class="method-description">
</div>
</div>
<div id="attribute-i-proxy_port" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">proxy_port</span><span
class="attribute-access-type">[W]</span>
</div>
<div class="method-description">
</div>
</div>
<div id="attribute-i-proxy_user" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">proxy_user</span><span
class="attribute-access-type">[W]</span>
</div>
<div class="method-description">
</div>
</div>
<div id="attribute-i-read_timeout" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">read_timeout</span><span
class="attribute-access-type">[R]</span>
</div>
<div class="method-description">
<p>Number of seconds to wait for one block to be read (via one read(2) call). Any number may be used, including Floats for fractional seconds. If the <a href="HTTP.html"><code>HTTP</code></a> object cannot read data in this many seconds, it raises a <a href="ReadTimeout.html"><code>Net::ReadTimeout</code></a> exception. The default value is 60 seconds.</p>
</div>
</div>
<div id="attribute-i-ssl_timeout" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">ssl_timeout</span><span
class="attribute-access-type">[RW]</span>
</div>
<div class="method-description">
<p>Sets the SSL timeout seconds.</p>
</div>
</div>
<div id="attribute-i-ssl_version" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">ssl_version</span><span
class="attribute-access-type">[RW]</span>
</div>
<div class="method-description">
<p>Sets the SSL version. See <a href="../OpenSSL/SSL/SSLContext.html#method-i-ssl_version-3D"><code>OpenSSL::SSL::SSLContext#ssl_version=</code></a></p>
</div>
</div>
<div id="attribute-i-verify_callback" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">verify_callback</span><span
class="attribute-access-type">[RW]</span>
</div>
<div class="method-description">
<p>Sets the verify callback for the server certification verification.</p>
</div>
</div>
<div id="attribute-i-verify_depth" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">verify_depth</span><span
class="attribute-access-type">[RW]</span>
</div>
<div class="method-description">
<p>Sets the maximum depth for the certificate chain verification.</p>
</div>
</div>
<div id="attribute-i-verify_mode" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">verify_mode</span><span
class="attribute-access-type">[RW]</span>
</div>
<div class="method-description">
<p>Sets the flags for server the certification verification at beginning of SSL/TLS session.</p>
<p>OpenSSL::SSL::VERIFY_NONE or OpenSSL::SSL::VERIFY_PEER are acceptable.</p>
</div>
</div>
<div id="attribute-i-write_timeout" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">write_timeout</span><span
class="attribute-access-type">[R]</span>
</div>
<div class="method-description">
<p>Number of seconds to wait for one block to be written (via one write(2) call). Any number may be used, including Floats for fractional seconds. If the <a href="HTTP.html"><code>HTTP</code></a> object cannot write data in this many seconds, it raises a <a href="WriteTimeout.html"><code>Net::WriteTimeout</code></a> exception. The default value is 60 seconds. <a href="WriteTimeout.html"><code>Net::WriteTimeout</code></a> is not raised on Windows.</p>
</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-Proxy" class="method-detail ">
<div class="method-heading">
<span class="method-name">Proxy</span><span
class="method-args">(p_addr = :ENV, p_port = nil, p_user = nil, p_pass = nil)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Creates an <a href="HTTP.html"><code>HTTP</code></a> proxy class which behaves like <a href="HTTP.html"><code>Net::HTTP</code></a>, but performs all access via the specified proxy.</p>
<p>This class is obsolete. You may pass these same parameters directly to <a href="HTTP.html#method-c-new"><code>Net::HTTP.new</code></a>. See <a href="HTTP.html#method-c-new"><code>Net::HTTP.new</code></a> for details of the arguments.</p>
<div class="method-source-code" id="Proxy-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 1066</span>
<span class="ruby-keyword">def</span> <span class="ruby-constant">HTTP</span>.<span class="ruby-constant">Proxy</span>(<span class="ruby-identifier ruby-title">p_addr</span> = <span class="ruby-value">:ENV</span>, <span class="ruby-identifier">p_port</span> = <span class="ruby-keyword">nil</span>, <span class="ruby-identifier">p_user</span> = <span class="ruby-keyword">nil</span>, <span class="ruby-identifier">p_pass</span> = <span class="ruby-keyword">nil</span>)
<span class="ruby-keyword">return</span> <span class="ruby-keyword">self</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">p_addr</span>
<span class="ruby-constant">Class</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword">self</span>) {
<span class="ruby-ivar">@is_proxy_class</span> = <span class="ruby-keyword">true</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">p_addr</span> <span class="ruby-operator">==</span> <span class="ruby-value">:ENV</span> <span class="ruby-keyword">then</span>
<span class="ruby-ivar">@proxy_from_env</span> = <span class="ruby-keyword">true</span>
<span class="ruby-ivar">@proxy_address</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-ivar">@proxy_port</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-keyword">else</span>
<span class="ruby-ivar">@proxy_from_env</span> = <span class="ruby-keyword">false</span>
<span class="ruby-ivar">@proxy_address</span> = <span class="ruby-identifier">p_addr</span>
<span class="ruby-ivar">@proxy_port</span> = <span class="ruby-identifier">p_port</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">default_port</span>
<span class="ruby-keyword">end</span>
<span class="ruby-ivar">@proxy_user</span> = <span class="ruby-identifier">p_user</span>
<span class="ruby-ivar">@proxy_pass</span> = <span class="ruby-identifier">p_pass</span>
}
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-c-default_port" class="method-detail ">
<div class="method-heading">
<span class="method-name">default_port</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>The default port to use for <a href="HTTP.html"><code>HTTP</code></a> requests; defaults to 80.</p>
<div class="method-source-code" id="default_port-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 539</span>
<span class="ruby-keyword">def</span> <span class="ruby-constant">HTTP</span>.<span class="ruby-identifier ruby-title">default_port</span>
<span class="ruby-identifier">http_default_port</span>()
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-c-get" class="method-detail ">
<div class="method-heading">
<span class="method-name">get</span><span
class="method-args">(uri_or_host, path = nil, port = nil)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Sends a GET request to the target and returns the <a href="HTTP.html"><code>HTTP</code></a> response as a string. The target can either be specified as (<code>uri</code>), or as (<code>host</code>, <code>path</code>, <code>port</code> = 80); so:</p>
<pre class="ruby"><span class="ruby-identifier">print</span> <span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTP</span>.<span class="ruby-identifier">get</span>(<span class="ruby-constant">URI</span>(<span class="ruby-string">'http://www.example.com/index.html'</span>))
</pre>
<p>or:</p>
<pre class="ruby"><span class="ruby-identifier">print</span> <span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTP</span>.<span class="ruby-identifier">get</span>(<span class="ruby-string">'www.example.com'</span>, <span class="ruby-string">'/index.html'</span>)
</pre>
<div class="method-source-code" id="get-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 457</span>
<span class="ruby-keyword">def</span> <span class="ruby-constant">HTTP</span>.<span class="ruby-identifier ruby-title">get</span>(<span class="ruby-identifier">uri_or_host</span>, <span class="ruby-identifier">path</span> = <span class="ruby-keyword">nil</span>, <span class="ruby-identifier">port</span> = <span class="ruby-keyword">nil</span>)
<span class="ruby-identifier">get_response</span>(<span class="ruby-identifier">uri_or_host</span>, <span class="ruby-identifier">path</span>, <span class="ruby-identifier">port</span>).<span class="ruby-identifier">body</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-c-get_print" class="method-detail ">
<div class="method-heading">
<span class="method-name">get_print</span><span
class="method-args">(uri_or_host, path = nil, port = nil)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Gets the body text from the target and outputs it to $stdout. The target can either be specified as (<code>uri</code>), or as (<code>host</code>, <code>path</code>, <code>port</code> = 80); so:</p>
<pre class="ruby"><span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTP</span>.<span class="ruby-identifier">get_print</span> <span class="ruby-constant">URI</span>(<span class="ruby-string">'http://www.example.com/index.html'</span>)
</pre>
<p>or:</p>
<pre class="ruby"><span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTP</span>.<span class="ruby-identifier">get_print</span> <span class="ruby-string">'www.example.com'</span>, <span class="ruby-string">'/index.html'</span>
</pre>
<div class="method-source-code" id="get_print-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 438</span>
<span class="ruby-keyword">def</span> <span class="ruby-constant">HTTP</span>.<span class="ruby-identifier ruby-title">get_print</span>(<span class="ruby-identifier">uri_or_host</span>, <span class="ruby-identifier">path</span> = <span class="ruby-keyword">nil</span>, <span class="ruby-identifier">port</span> = <span class="ruby-keyword">nil</span>)
<span class="ruby-identifier">get_response</span>(<span class="ruby-identifier">uri_or_host</span>, <span class="ruby-identifier">path</span>, <span class="ruby-identifier">port</span>) {<span class="ruby-operator">|</span><span class="ruby-identifier">res</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">res</span>.<span class="ruby-identifier">read_body</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">chunk</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">$stdout</span>.<span class="ruby-identifier">print</span> <span class="ruby-identifier">chunk</span>
<span class="ruby-keyword">end</span>
}
<span class="ruby-keyword">nil</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-c-get_response" class="method-detail ">
<div class="method-heading">
<span class="method-name">get_response</span><span
class="method-args">(uri_or_host, path = nil, port = nil, &block)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Sends a GET request to the target and returns the <a href="HTTP.html"><code>HTTP</code></a> response as a <a href="HTTPResponse.html"><code>Net::HTTPResponse</code></a> object. The target can either be specified as (<code>uri</code>), or as (<code>host</code>, <code>path</code>, <code>port</code> = 80); so:</p>
<pre class="ruby"><span class="ruby-identifier">res</span> = <span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTP</span>.<span class="ruby-identifier">get_response</span>(<span class="ruby-constant">URI</span>(<span class="ruby-string">'http://www.example.com/index.html'</span>))
<span class="ruby-identifier">print</span> <span class="ruby-identifier">res</span>.<span class="ruby-identifier">body</span>
</pre>
<p>or:</p>
<pre class="ruby"><span class="ruby-identifier">res</span> = <span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTP</span>.<span class="ruby-identifier">get_response</span>(<span class="ruby-string">'www.example.com'</span>, <span class="ruby-string">'/index.html'</span>)
<span class="ruby-identifier">print</span> <span class="ruby-identifier">res</span>.<span class="ruby-identifier">body</span>
</pre>
<div class="method-source-code" id="get_response-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 473</span>
<span class="ruby-keyword">def</span> <span class="ruby-constant">HTTP</span>.<span class="ruby-identifier ruby-title">get_response</span>(<span class="ruby-identifier">uri_or_host</span>, <span class="ruby-identifier">path</span> = <span class="ruby-keyword">nil</span>, <span class="ruby-identifier">port</span> = <span class="ruby-keyword">nil</span>, <span class="ruby-operator">&</span><span class="ruby-identifier">block</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">path</span>
<span class="ruby-identifier">host</span> = <span class="ruby-identifier">uri_or_host</span>
<span class="ruby-identifier">new</span>(<span class="ruby-identifier">host</span>, <span class="ruby-identifier">port</span> <span class="ruby-operator">||</span> <span class="ruby-constant">HTTP</span>.<span class="ruby-identifier">default_port</span>).<span class="ruby-identifier">start</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">http</span><span class="ruby-operator">|</span>
<span class="ruby-keyword">return</span> <span class="ruby-identifier">http</span>.<span class="ruby-identifier">request_get</span>(<span class="ruby-identifier">path</span>, <span class="ruby-operator">&</span><span class="ruby-identifier">block</span>)
}
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">uri</span> = <span class="ruby-identifier">uri_or_host</span>
<span class="ruby-identifier">start</span>(<span class="ruby-identifier">uri</span>.<span class="ruby-identifier">hostname</span>, <span class="ruby-identifier">uri</span>.<span class="ruby-identifier">port</span>,
<span class="ruby-value">:use_ssl</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">uri</span>.<span class="ruby-identifier">scheme</span> <span class="ruby-operator">==</span> <span class="ruby-string">'https'</span>) {<span class="ruby-operator">|</span><span class="ruby-identifier">http</span><span class="ruby-operator">|</span>
<span class="ruby-keyword">return</span> <span class="ruby-identifier">http</span>.<span class="ruby-identifier">request_get</span>(<span class="ruby-identifier">uri</span>, <span class="ruby-operator">&</span><span class="ruby-identifier">block</span>)
}
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-c-http_default_port" class="method-detail ">
<div class="method-heading">
<span class="method-name">http_default_port</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>The default port to use for <a href="HTTP.html"><code>HTTP</code></a> requests; defaults to 80.</p>
<div class="method-source-code" id="http_default_port-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 544</span>
<span class="ruby-keyword">def</span> <span class="ruby-constant">HTTP</span>.<span class="ruby-identifier ruby-title">http_default_port</span>
<span class="ruby-value">80</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-c-https_default_port" class="method-detail ">
<div class="method-heading">
<span class="method-name">https_default_port</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>The default port to use for HTTPS requests; defaults to 443.</p>
<div class="method-source-code" id="https_default_port-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 549</span>
<span class="ruby-keyword">def</span> <span class="ruby-constant">HTTP</span>.<span class="ruby-identifier ruby-title">https_default_port</span>
<span class="ruby-value">443</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-c-is_version_1_2-3F" class="method-detail method-alias">
<div class="method-heading">
<span class="method-name">is_version_1_2?</span><span
class="method-args">()</span>
</div>
<div class="method-description">
</div>
<div class="aliases">
Alias for: <a href="HTTP.html#method-c-version_1_2-3F">version_1_2?</a>
</div>
</div>
<div id="method-c-new" class="method-detail ">
<div class="method-heading">
<span class="method-name">new</span><span
class="method-args">(address, port = nil)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Creates a new <a href="HTTP.html"><code>Net::HTTP</code></a> object for the specified server address, without opening the TCP connection or initializing the <a href="HTTP.html"><code>HTTP</code></a> session. The <code>address</code> should be a DNS hostname or IP address.</p>
<div class="method-source-code" id="new-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 661</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">initialize</span>(<span class="ruby-identifier">address</span>, <span class="ruby-identifier">port</span> = <span class="ruby-keyword">nil</span>)
<span class="ruby-ivar">@address</span> = <span class="ruby-identifier">address</span>
<span class="ruby-ivar">@port</span> = (<span class="ruby-identifier">port</span> <span class="ruby-operator">||</span> <span class="ruby-constant">HTTP</span>.<span class="ruby-identifier">default_port</span>)
<span class="ruby-ivar">@ipaddr</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-ivar">@local_host</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-ivar">@local_port</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-ivar">@curr_http_version</span> = <span class="ruby-constant">HTTPVersion</span>
<span class="ruby-ivar">@keep_alive_timeout</span> = <span class="ruby-value">2</span>
<span class="ruby-ivar">@last_communicated</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-ivar">@close_on_empty_response</span> = <span class="ruby-keyword">false</span>
<span class="ruby-ivar">@socket</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-ivar">@started</span> = <span class="ruby-keyword">false</span>
<span class="ruby-ivar">@open_timeout</span> = <span class="ruby-value">60</span>
<span class="ruby-ivar">@read_timeout</span> = <span class="ruby-value">60</span>
<span class="ruby-ivar">@write_timeout</span> = <span class="ruby-value">60</span>
<span class="ruby-ivar">@continue_timeout</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-ivar">@max_retries</span> = <span class="ruby-value">1</span>
<span class="ruby-ivar">@debug_output</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-ivar">@proxy_from_env</span> = <span class="ruby-keyword">false</span>
<span class="ruby-ivar">@proxy_uri</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-ivar">@proxy_address</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-ivar">@proxy_port</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-ivar">@proxy_user</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-ivar">@proxy_pass</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-ivar">@use_ssl</span> = <span class="ruby-keyword">false</span>
<span class="ruby-ivar">@ssl_context</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-ivar">@ssl_session</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-ivar">@sspi_enabled</span> = <span class="ruby-keyword">false</span>
<span class="ruby-constant">SSL_IVNAMES</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">ivname</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">instance_variable_set</span> <span class="ruby-identifier">ivname</span>, <span class="ruby-keyword">nil</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-c-new" class="method-detail ">
<div class="method-heading">
<span class="method-name">new</span><span
class="method-args">(address, port = nil, p_addr = :ENV, p_port = nil, p_user = nil, p_pass = nil, p_no_proxy = nil)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Creates a new <a href="HTTP.html"><code>Net::HTTP</code></a> object without opening a TCP connection or <a href="HTTP.html"><code>HTTP</code></a> session.</p>
<p>The <code>address</code> should be a DNS hostname or IP address, the <code>port</code> is the port the server operates on. If no <code>port</code> is given the default port for <a href="HTTP.html"><code>HTTP</code></a> or HTTPS is used.</p>
<p>If none of the <code>p_</code> arguments are given, the proxy host and port are taken from the <code>http_proxy</code> environment variable (or its uppercase equivalent) if present. If the proxy requires authentication you must supply it by hand. See <a href="../URI/Generic.html#method-i-find_proxy"><code>URI::Generic#find_proxy</code></a> for details of proxy detection from the environment. To disable proxy detection set <code>p_addr</code> to nil.</p>
<p>If you are connecting to a custom proxy, <code>p_addr</code> specifies the DNS name or IP address of the proxy host, <code>p_port</code> the port to use to access the proxy, <code>p_user</code> and <code>p_pass</code> the username and password if authorization is required to use the proxy, and p_no_proxy hosts which do not use the proxy.</p>
<div class="method-calls-super">
Calls superclass method
</div>
<div class="method-source-code" id="new-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 633</span>
<span class="ruby-keyword">def</span> <span class="ruby-constant">HTTP</span>.<span class="ruby-identifier ruby-title">new</span>(<span class="ruby-identifier">address</span>, <span class="ruby-identifier">port</span> = <span class="ruby-keyword">nil</span>, <span class="ruby-identifier">p_addr</span> = <span class="ruby-value">:ENV</span>, <span class="ruby-identifier">p_port</span> = <span class="ruby-keyword">nil</span>, <span class="ruby-identifier">p_user</span> = <span class="ruby-keyword">nil</span>, <span class="ruby-identifier">p_pass</span> = <span class="ruby-keyword">nil</span>, <span class="ruby-identifier">p_no_proxy</span> = <span class="ruby-keyword">nil</span>)
<span class="ruby-identifier">http</span> = <span class="ruby-keyword">super</span> <span class="ruby-identifier">address</span>, <span class="ruby-identifier">port</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">proxy_class?</span> <span class="ruby-keyword">then</span> <span class="ruby-comment"># from Net::HTTP::Proxy()</span>
<span class="ruby-identifier">http</span>.<span class="ruby-identifier">proxy_from_env</span> = <span class="ruby-ivar">@proxy_from_env</span>
<span class="ruby-identifier">http</span>.<span class="ruby-identifier">proxy_address</span> = <span class="ruby-ivar">@proxy_address</span>
<span class="ruby-identifier">http</span>.<span class="ruby-identifier">proxy_port</span> = <span class="ruby-ivar">@proxy_port</span>
<span class="ruby-identifier">http</span>.<span class="ruby-identifier">proxy_user</span> = <span class="ruby-ivar">@proxy_user</span>
<span class="ruby-identifier">http</span>.<span class="ruby-identifier">proxy_pass</span> = <span class="ruby-ivar">@proxy_pass</span>
<span class="ruby-keyword">elsif</span> <span class="ruby-identifier">p_addr</span> <span class="ruby-operator">==</span> <span class="ruby-value">:ENV</span> <span class="ruby-keyword">then</span>
<span class="ruby-identifier">http</span>.<span class="ruby-identifier">proxy_from_env</span> = <span class="ruby-keyword">true</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">p_addr</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">p_no_proxy</span> <span class="ruby-operator">&&</span> <span class="ruby-operator">!</span><span class="ruby-constant">URI</span><span class="ruby-operator">::</span><span class="ruby-constant">Generic</span>.<span class="ruby-identifier">use_proxy?</span>(<span class="ruby-identifier">p_addr</span>, <span class="ruby-identifier">p_addr</span>, <span class="ruby-identifier">p_port</span>, <span class="ruby-identifier">p_no_proxy</span>)
<span class="ruby-identifier">p_addr</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-identifier">p_port</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">http</span>.<span class="ruby-identifier">proxy_address</span> = <span class="ruby-identifier">p_addr</span>
<span class="ruby-identifier">http</span>.<span class="ruby-identifier">proxy_port</span> = <span class="ruby-identifier">p_port</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">default_port</span>
<span class="ruby-identifier">http</span>.<span class="ruby-identifier">proxy_user</span> = <span class="ruby-identifier">p_user</span>
<span class="ruby-identifier">http</span>.<span class="ruby-identifier">proxy_pass</span> = <span class="ruby-identifier">p_pass</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">http</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
<div class="aliases">
Also aliased as: <a href="HTTP.html#method-c-newobj">newobj</a>
</div>
</div>
<div id="method-c-newobj" class="method-detail method-alias">
<div class="method-heading">
<span class="method-name">newobj</span><span
class="method-args">(address, port = nil, p_addr = :ENV, p_port = nil, p_user = nil, p_pass = nil, p_no_proxy = nil)</span>
</div>
<div class="method-description">
</div>
<div class="aliases">
Alias for: <a href="HTTP.html#method-c-new">new</a>
</div>
</div>
<div id="method-c-post" class="method-detail ">
<div class="method-heading">
<span class="method-name">post</span><span
class="method-args">(url, data, header = nil)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Posts data to the specified <a href="../URI.html"><code>URI</code></a> object.</p>
<p>Example:</p>
<pre class="ruby"><span class="ruby-identifier">require</span> <span class="ruby-string">'net/http'</span>
<span class="ruby-identifier">require</span> <span class="ruby-string">'uri'</span>
<span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTP</span>.<span class="ruby-identifier">post</span> <span class="ruby-constant">URI</span>(<span class="ruby-string">'http://www.example.com/api/search'</span>),
{ <span class="ruby-string">"q"</span> <span class="ruby-operator">=></span> <span class="ruby-string">"ruby"</span>, <span class="ruby-string">"max"</span> <span class="ruby-operator">=></span> <span class="ruby-string">"50"</span> }.<span class="ruby-identifier">to_json</span>,
<span class="ruby-string">"Content-Type"</span> <span class="ruby-operator">=></span> <span class="ruby-string">"application/json"</span>
</pre>
<div class="method-source-code" id="post-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 499</span>
<span class="ruby-keyword">def</span> <span class="ruby-constant">HTTP</span>.<span class="ruby-identifier ruby-title">post</span>(<span class="ruby-identifier">url</span>, <span class="ruby-identifier">data</span>, <span class="ruby-identifier">header</span> = <span class="ruby-keyword">nil</span>)
<span class="ruby-identifier">start</span>(<span class="ruby-identifier">url</span>.<span class="ruby-identifier">hostname</span>, <span class="ruby-identifier">url</span>.<span class="ruby-identifier">port</span>,
<span class="ruby-value">:use_ssl</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">url</span>.<span class="ruby-identifier">scheme</span> <span class="ruby-operator">==</span> <span class="ruby-string">'https'</span> ) {<span class="ruby-operator">|</span><span class="ruby-identifier">http</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">http</span>.<span class="ruby-identifier">post</span>(<span class="ruby-identifier">url</span>, <span class="ruby-identifier">data</span>, <span class="ruby-identifier">header</span>)
}
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-c-post_form" class="method-detail ">
<div class="method-heading">
<span class="method-name">post_form</span><span
class="method-args">(url, params)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Posts HTML form data to the specified <a href="../URI.html"><code>URI</code></a> object. The form data must be provided as a <a href="../Hash.html"><code>Hash</code></a> mapping from <a href="../String.html"><code>String</code></a> to <a href="../String.html"><code>String</code></a>. Example:</p>
<pre class="ruby">{ <span class="ruby-string">"cmd"</span> <span class="ruby-operator">=></span> <span class="ruby-string">"search"</span>, <span class="ruby-string">"q"</span> <span class="ruby-operator">=></span> <span class="ruby-string">"ruby"</span>, <span class="ruby-string">"max"</span> <span class="ruby-operator">=></span> <span class="ruby-string">"50"</span> }
</pre>
<p>This method also does Basic Authentication iff <code>url</code>.user exists. But userinfo for authentication is deprecated (RFC3986). So this feature will be removed.</p>
<p>Example:</p>
<pre class="ruby"><span class="ruby-identifier">require</span> <span class="ruby-string">'net/http'</span>
<span class="ruby-identifier">require</span> <span class="ruby-string">'uri'</span>
<span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTP</span>.<span class="ruby-identifier">post_form</span> <span class="ruby-constant">URI</span>(<span class="ruby-string">'http://www.example.com/search.cgi'</span>),
{ <span class="ruby-string">"q"</span> <span class="ruby-operator">=></span> <span class="ruby-string">"ruby"</span>, <span class="ruby-string">"max"</span> <span class="ruby-operator">=></span> <span class="ruby-string">"50"</span> }
</pre>
<div class="method-source-code" id="post_form-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 524</span>
<span class="ruby-keyword">def</span> <span class="ruby-constant">HTTP</span>.<span class="ruby-identifier ruby-title">post_form</span>(<span class="ruby-identifier">url</span>, <span class="ruby-identifier">params</span>)
<span class="ruby-identifier">req</span> = <span class="ruby-constant">Post</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">url</span>)
<span class="ruby-identifier">req</span>.<span class="ruby-identifier">form_data</span> = <span class="ruby-identifier">params</span>
<span class="ruby-identifier">req</span>.<span class="ruby-identifier">basic_auth</span> <span class="ruby-identifier">url</span>.<span class="ruby-identifier">user</span>, <span class="ruby-identifier">url</span>.<span class="ruby-identifier">password</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">url</span>.<span class="ruby-identifier">user</span>
<span class="ruby-identifier">start</span>(<span class="ruby-identifier">url</span>.<span class="ruby-identifier">hostname</span>, <span class="ruby-identifier">url</span>.<span class="ruby-identifier">port</span>,
<span class="ruby-value">:use_ssl</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">url</span>.<span class="ruby-identifier">scheme</span> <span class="ruby-operator">==</span> <span class="ruby-string">'https'</span> ) {<span class="ruby-operator">|</span><span class="ruby-identifier">http</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">http</span>.<span class="ruby-identifier">request</span>(<span class="ruby-identifier">req</span>)
}
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-c-proxy_class-3F" class="method-detail ">
<div class="method-heading">
<span class="method-name">proxy_class?</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>returns true if self is a class which was created by HTTP::Proxy.</p>
<div class="method-source-code" id="proxy_class-3F-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 1089</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">proxy_class?</span>
<span class="ruby-keyword">defined?</span>(<span class="ruby-ivar">@is_proxy_class</span>) <span class="ruby-operator">?</span> <span class="ruby-ivar">@is_proxy_class</span> <span class="ruby-operator">:</span> <span class="ruby-keyword">false</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-c-start" class="method-detail ">
<div class="method-heading">
<span class="method-callseq">
start(address, port, p_addr, p_port, p_user, p_pass, &block)
</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-heading">
<span class="method-callseq">
start(address, port=nil, p_addr=:ENV, p_port=nil, p_user=nil, p_pass=nil, opt, &block)
</span>
</div>
<div class="method-description">
<p>Creates a new <a href="HTTP.html"><code>Net::HTTP</code></a> object, then additionally opens the TCP connection and <a href="HTTP.html"><code>HTTP</code></a> session.</p>
<p>Arguments are the following:</p>
<dl class="rdoc-list note-list"><dt><em>address</em>
<dd>
<p>hostname or IP address of the server</p>
</dd><dt><em>port</em>
<dd>
<p>port of the server</p>
</dd><dt><em>p_addr</em>
<dd>
<p>address of proxy</p>
</dd><dt><em>p_port</em>
<dd>
<p>port of proxy</p>
</dd><dt><em>p_user</em>
<dd>
<p>user of proxy</p>
</dd><dt><em>p_pass</em>
<dd>
<p>pass of proxy</p>
</dd><dt><em>opt</em>
<dd>
<p>optional hash</p>
</dd></dl>
<p><em>opt</em> sets following values by its accessor. The keys are ipaddr, <a href="HTTP.html#attribute-i-ca_file"><code>ca_file</code></a>, <a href="HTTP.html#attribute-i-ca_path"><code>ca_path</code></a>, cert, <a href="HTTP.html#attribute-i-cert_store"><code>cert_store</code></a>, ciphers, <a href="HTTP.html#attribute-i-close_on_empty_response"><code>close_on_empty_response</code></a>, key, <a href="HTTP.html#attribute-i-open_timeout"><code>open_timeout</code></a>, <a href="HTTP.html#attribute-i-read_timeout"><code>read_timeout</code></a>, <a href="HTTP.html#attribute-i-write_timeout"><code>write_timeout</code></a>, <a href="HTTP.html#attribute-i-ssl_timeout"><code>ssl_timeout</code></a>, <a href="HTTP.html#attribute-i-ssl_version"><code>ssl_version</code></a>, use_ssl, <a href="HTTP.html#attribute-i-verify_callback"><code>verify_callback</code></a>, <a href="HTTP.html#attribute-i-verify_depth"><code>verify_depth</code></a> and verify_mode. If you set :use_ssl as true, you can use https and default value of <a href="HTTP.html#attribute-i-verify_mode"><code>verify_mode</code></a> is set as OpenSSL::SSL::VERIFY_PEER.</p>
<p>If the optional block is given, the newly created <a href="HTTP.html"><code>Net::HTTP</code></a> object is passed to it and closed when the block finishes. In this case, the return value of this method is the return value of the block. If no block is given, the return value of this method is the newly created <a href="HTTP.html"><code>Net::HTTP</code></a> object itself, and the caller is responsible for closing it upon completion using the finish() method.</p>
<div class="method-source-code" id="start-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 587</span>
<span class="ruby-keyword">def</span> <span class="ruby-constant">HTTP</span>.<span class="ruby-identifier ruby-title">start</span>(<span class="ruby-identifier">address</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">arg</span>, <span class="ruby-operator">&</span><span class="ruby-identifier">block</span>) <span class="ruby-comment"># :yield: +http+</span>
<span class="ruby-identifier">arg</span>.<span class="ruby-identifier">pop</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">opt</span> = <span class="ruby-constant">Hash</span>.<span class="ruby-identifier">try_convert</span>(<span class="ruby-identifier">arg</span>[<span class="ruby-value">-1</span>])
<span class="ruby-identifier">port</span>, <span class="ruby-identifier">p_addr</span>, <span class="ruby-identifier">p_port</span>, <span class="ruby-identifier">p_user</span>, <span class="ruby-identifier">p_pass</span> = <span class="ruby-operator">*</span><span class="ruby-identifier">arg</span>
<span class="ruby-identifier">p_addr</span> = <span class="ruby-value">:ENV</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">arg</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator"><</span> <span class="ruby-value">2</span>
<span class="ruby-identifier">port</span> = <span class="ruby-identifier">https_default_port</span> <span class="ruby-keyword">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">port</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">opt</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">opt</span>[<span class="ruby-value">:use_ssl</span>]
<span class="ruby-identifier">http</span> = <span class="ruby-identifier">new</span>(<span class="ruby-identifier">address</span>, <span class="ruby-identifier">port</span>, <span class="ruby-identifier">p_addr</span>, <span class="ruby-identifier">p_port</span>, <span class="ruby-identifier">p_user</span>, <span class="ruby-identifier">p_pass</span>)
<span class="ruby-identifier">http</span>.<span class="ruby-identifier">ipaddr</span> = <span class="ruby-identifier">opt</span>[<span class="ruby-value">:ipaddr</span>] <span class="ruby-keyword">if</span> <span class="ruby-identifier">opt</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">opt</span>[<span class="ruby-value">:ipaddr</span>]
<span class="ruby-keyword">if</span> <span class="ruby-identifier">opt</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">opt</span>[<span class="ruby-value">:use_ssl</span>]
<span class="ruby-identifier">opt</span> = {<span class="ruby-value">verify_mode:</span> <span class="ruby-constant">OpenSSL</span><span class="ruby-operator">::</span><span class="ruby-constant">SSL</span><span class="ruby-operator">::</span><span class="ruby-constant">VERIFY_PEER</span>}.<span class="ruby-identifier">update</span>(<span class="ruby-identifier">opt</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">http</span>.<span class="ruby-identifier">methods</span>.<span class="ruby-identifier">grep</span>(<span class="ruby-regexp">/\A(\w+)=\z/</span>) <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">meth</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">key</span> = <span class="ruby-node">$1</span>.<span class="ruby-identifier">to_sym</span>
<span class="ruby-identifier">opt</span>.<span class="ruby-identifier">key?</span>(<span class="ruby-identifier">key</span>) <span class="ruby-keyword">or</span> <span class="ruby-keyword">next</span>
<span class="ruby-identifier">http</span>.<span class="ruby-identifier">__send__</span>(<span class="ruby-identifier">meth</span>, <span class="ruby-identifier">opt</span>[<span class="ruby-identifier">key</span>])
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">http</span>.<span class="ruby-identifier">start</span>(<span class="ruby-operator">&</span><span class="ruby-identifier">block</span>)
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-c-version_1_2" class="method-detail ">
<div class="method-heading">
<span class="method-name">version_1_2</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Turns on net/http 1.2 (Ruby 1.8) features. Defaults to ON in Ruby 1.8 or later.</p>
<div class="method-source-code" id="version_1_2-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 404</span>
<span class="ruby-keyword">def</span> <span class="ruby-constant">HTTP</span>.<span class="ruby-identifier ruby-title">version_1_2</span>
<span class="ruby-keyword">true</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-c-version_1_2-3F" class="method-detail ">
<div class="method-heading">
<span class="method-name">version_1_2?</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Returns true if net/http is in version 1.2 mode. Defaults to true.</p>
<div class="method-source-code" id="version_1_2-3F-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 410</span>
<span class="ruby-keyword">def</span> <span class="ruby-constant">HTTP</span>.<span class="ruby-identifier ruby-title">version_1_2?</span>
<span class="ruby-keyword">true</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
<div class="aliases">
Also aliased as: <a href="HTTP.html#method-c-is_version_1_2-3F">is_version_1_2?</a>
</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-active-3F" class="method-detail method-alias">
<div class="method-heading">
<span class="method-name">active?</span><span
class="method-args">()</span>
</div>
<div class="method-description">
</div>
<div class="aliases">
Alias for: <a href="HTTP.html#method-i-started-3F">started?</a>
</div>
</div>
<div id="method-i-continue_timeout-3D" class="method-detail ">
<div class="method-heading">
<span class="method-name">continue_timeout=</span><span
class="method-args">(sec)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Setter for the <a href="HTTP.html#attribute-i-continue_timeout"><code>continue_timeout</code></a> attribute.</p>
<div class="method-source-code" id="continue_timeout-3D-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 796</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">continue_timeout=</span>(<span class="ruby-identifier">sec</span>)
<span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">continue_timeout</span> = <span class="ruby-identifier">sec</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@socket</span>
<span class="ruby-ivar">@continue_timeout</span> = <span class="ruby-identifier">sec</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-copy" class="method-detail ">
<div class="method-heading">
<span class="method-name">copy</span><span
class="method-args">(path, initheader = nil)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Sends a COPY request to the <code>path</code> and gets a response, as an <a href="HTTPResponse.html"><code>HTTPResponse</code></a> object.</p>
<div class="method-source-code" id="copy-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 1351</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">copy</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">initheader</span> = <span class="ruby-keyword">nil</span>)
<span class="ruby-identifier">request</span>(<span class="ruby-constant">Copy</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">initheader</span>))
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-delete" class="method-detail ">
<div class="method-heading">
<span class="method-name">delete</span><span
class="method-args">(path, initheader = {'Depth' => 'Infinity'})</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Sends a DELETE request to the <code>path</code> and gets a response, as an <a href="HTTPResponse.html"><code>HTTPResponse</code></a> object.</p>
<div class="method-source-code" id="delete-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 1339</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">delete</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">initheader</span> = {<span class="ruby-string">'Depth'</span> <span class="ruby-operator">=></span> <span class="ruby-string">'Infinity'</span>})
<span class="ruby-identifier">request</span>(<span class="ruby-constant">Delete</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">initheader</span>))
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-finish" class="method-detail ">
<div class="method-heading">
<span class="method-name">finish</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Finishes the <a href="HTTP.html"><code>HTTP</code></a> session and closes the TCP connection. Raises <a href="../IOError.html"><code>IOError</code></a> if the session has not been started.</p>
<div class="method-source-code" id="finish-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 1035</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">finish</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">IOError</span>, <span class="ruby-string">'HTTP session not yet started'</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">started?</span>
<span class="ruby-identifier">do_finish</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-get" class="method-detail ">
<div class="method-heading">
<span class="method-name">get</span><span
class="method-args">(path, initheader = nil, dest = nil) { |body_segment| ... }</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Retrieves data from <code>path</code> on the connected-to host which may be an absolute path <a href="../String.html"><code>String</code></a> or a <a href="../URI.html"><code>URI</code></a> to extract the path from.</p>
<p><code>initheader</code> must be a <a href="../Hash.html"><code>Hash</code></a> like { 'Accept' => '<strong>/</strong>', … }, and it defaults to an empty hash. If <code>initheader</code> doesn't have the key 'accept-encoding', then a value of “gzip;q=1.0,deflate;q=0.6,identity;q=0.3” is used, so that gzip compression is used in preference to deflate compression, which is used in preference to no compression. Ruby doesn't have libraries to support the compress (Lempel-Ziv) compression, so that is not supported. The intent of this is to reduce bandwidth by default. If this routine sets up compression, then it does the decompression also, removing the header as well to prevent confusion. Otherwise it leaves the body as it found it.</p>
<p>This method returns a <a href="HTTPResponse.html"><code>Net::HTTPResponse</code></a> object.</p>
<p>If called with a block, yields each fragment of the entity body in turn as a string as it is read from the socket. Note that in this case, the returned response object will <strong>not</strong> contain a (meaningful) body.</p>
<p><code>dest</code> argument is obsolete. It still works but you must not use it.</p>
<p>This method never raises an exception.</p>
<pre class="ruby"><span class="ruby-identifier">response</span> = <span class="ruby-identifier">http</span>.<span class="ruby-identifier">get</span>(<span class="ruby-string">'/index.html'</span>)
<span class="ruby-comment"># using block</span>
<span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-string">'result.txt'</span>, <span class="ruby-string">'w'</span>) {<span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">http</span>.<span class="ruby-identifier">get</span>(<span class="ruby-string">'/~foo/'</span>) <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">str</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">f</span>.<span class="ruby-identifier">write</span> <span class="ruby-identifier">str</span>
<span class="ruby-keyword">end</span>
}
</pre>
<div class="method-source-code" id="get-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 1239</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">get</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">initheader</span> = <span class="ruby-keyword">nil</span>, <span class="ruby-identifier">dest</span> = <span class="ruby-keyword">nil</span>, <span class="ruby-operator">&</span><span class="ruby-identifier">block</span>) <span class="ruby-comment"># :yield: +body_segment+</span>
<span class="ruby-identifier">res</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-identifier">request</span>(<span class="ruby-constant">Get</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">initheader</span>)) {<span class="ruby-operator">|</span><span class="ruby-identifier">r</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">r</span>.<span class="ruby-identifier">read_body</span> <span class="ruby-identifier">dest</span>, <span class="ruby-operator">&</span><span class="ruby-identifier">block</span>
<span class="ruby-identifier">res</span> = <span class="ruby-identifier">r</span>
}
<span class="ruby-identifier">res</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-get2" class="method-detail method-alias">
<div class="method-heading">
<span class="method-name">get2</span><span
class="method-args">(path, initheader = nil)</span>
</div>
<div class="method-description">
</div>
<div class="aliases">
Alias for: <a href="HTTP.html#method-i-request_get">request_get</a>
</div>
</div>
<div id="method-i-head" class="method-detail ">
<div class="method-heading">
<span class="method-name">head</span><span
class="method-args">(path, initheader = nil)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Gets only the header from <code>path</code> on the connected-to host. <code>header</code> is a <a href="../Hash.html"><code>Hash</code></a> like { 'Accept' => '<strong>/</strong>', … }.</p>
<p>This method returns a <a href="HTTPResponse.html"><code>Net::HTTPResponse</code></a> object.</p>
<p>This method never raises an exception.</p>
<pre class="ruby"><span class="ruby-identifier">response</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTP</span>.<span class="ruby-identifier">start</span>(<span class="ruby-string">'some.www.server'</span>, <span class="ruby-value">80</span>) {<span class="ruby-operator">|</span><span class="ruby-identifier">http</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">response</span> = <span class="ruby-identifier">http</span>.<span class="ruby-identifier">head</span>(<span class="ruby-string">'/index.html'</span>)
}
<span class="ruby-identifier">p</span> <span class="ruby-identifier">response</span>[<span class="ruby-string">'content-type'</span>]
</pre>
<div class="method-source-code" id="head-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 1261</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">head</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">initheader</span> = <span class="ruby-keyword">nil</span>)
<span class="ruby-identifier">request</span>(<span class="ruby-constant">Head</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">initheader</span>))
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-head2" class="method-detail method-alias">
<div class="method-heading">
<span class="method-name">head2</span><span
class="method-args">(path, initheader = nil, &block)</span>
</div>
<div class="method-description">
</div>
<div class="aliases">
Alias for: <a href="HTTP.html#method-i-request_head">request_head</a>
</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.rb, line 696</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">inspect</span>
<span class="ruby-node">"#<#{self.class} #{@address}:#{@port} open=#{started?}>"</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-ipaddr" class="method-detail ">
<div class="method-heading">
<span class="method-name">ipaddr</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>The IP address to connect to/used to connect to</p>
<div class="method-source-code" id="ipaddr-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 733</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">ipaddr</span>
<span class="ruby-identifier">started?</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">io</span>.<span class="ruby-identifier">peeraddr</span>[<span class="ruby-value">3</span>] <span class="ruby-operator">:</span> <span class="ruby-ivar">@ipaddr</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-ipaddr-3D" class="method-detail ">
<div class="method-heading">
<span class="method-name">ipaddr=</span><span
class="method-args">(addr)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p><a href="../Set.html"><code>Set</code></a> the IP address to connect to</p>
<div class="method-source-code" id="ipaddr-3D-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 738</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">ipaddr=</span>(<span class="ruby-identifier">addr</span>)
<span class="ruby-identifier">raise</span> <span class="ruby-constant">IOError</span>, <span class="ruby-string">"ipaddr value changed, but session already started"</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">started?</span>
<span class="ruby-ivar">@ipaddr</span> = <span class="ruby-identifier">addr</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-lock" class="method-detail ">
<div class="method-heading">
<span class="method-name">lock</span><span
class="method-args">(path, body, initheader = nil)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Sends a LOCK request to the <code>path</code> and gets a response, as an <a href="HTTPResponse.html"><code>HTTPResponse</code></a> object.</p>
<div class="method-source-code" id="lock-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 1315</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">lock</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">body</span>, <span class="ruby-identifier">initheader</span> = <span class="ruby-keyword">nil</span>)
<span class="ruby-identifier">request</span>(<span class="ruby-constant">Lock</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">initheader</span>), <span class="ruby-identifier">body</span>)
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-max_retries-3D" class="method-detail ">
<div class="method-heading">
<span class="method-name">max_retries=</span><span
class="method-args">(retries)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Maximum number of times to retry an idempotent request in case of <a href="ReadTimeout.html"><code>Net::ReadTimeout</code></a>, <a href="../IOError.html"><code>IOError</code></a>, <a href="../EOFError.html"><code>EOFError</code></a>, <a href="../Errno/ECONNRESET.html"><code>Errno::ECONNRESET</code></a>, <a href="../Errno/ECONNABORTED.html"><code>Errno::ECONNABORTED</code></a>, Errno::EPIPE, <a href="../OpenSSL/SSL/SSLError.html"><code>OpenSSL::SSL::SSLError</code></a>, <a href="../Timeout/Error.html"><code>Timeout::Error</code></a>. Should be a non-negative integer number. Zero means no retries. The default value is 1.</p>
<div class="method-source-code" id="max_retries-3D-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 768</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">max_retries=</span>(<span class="ruby-identifier">retries</span>)
<span class="ruby-identifier">retries</span> = <span class="ruby-identifier">retries</span>.<span class="ruby-identifier">to_int</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">retries</span> <span class="ruby-operator"><</span> <span class="ruby-value">0</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-string">'max_retries should be non-negative integer number'</span>
<span class="ruby-keyword">end</span>
<span class="ruby-ivar">@max_retries</span> = <span class="ruby-identifier">retries</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-mkcol" class="method-detail ">
<div class="method-heading">
<span class="method-name">mkcol</span><span
class="method-args">(path, body = nil, initheader = nil)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Sends a MKCOL request to the <code>path</code> and gets a response, as an <a href="HTTPResponse.html"><code>HTTPResponse</code></a> object.</p>
<div class="method-source-code" id="mkcol-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 1357</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">mkcol</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">body</span> = <span class="ruby-keyword">nil</span>, <span class="ruby-identifier">initheader</span> = <span class="ruby-keyword">nil</span>)
<span class="ruby-identifier">request</span>(<span class="ruby-constant">Mkcol</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">initheader</span>), <span class="ruby-identifier">body</span>)
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-move" class="method-detail ">
<div class="method-heading">
<span class="method-name">move</span><span
class="method-args">(path, initheader = nil)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Sends a MOVE request to the <code>path</code> and gets a response, as an <a href="HTTPResponse.html"><code>HTTPResponse</code></a> object.</p>
<div class="method-source-code" id="move-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 1345</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">move</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">initheader</span> = <span class="ruby-keyword">nil</span>)
<span class="ruby-identifier">request</span>(<span class="ruby-constant">Move</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">initheader</span>))
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-options" class="method-detail ">
<div class="method-heading">
<span class="method-name">options</span><span
class="method-args">(path, initheader = nil)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Sends a OPTIONS request to the <code>path</code> and gets a response, as an <a href="HTTPResponse.html"><code>HTTPResponse</code></a> object.</p>
<div class="method-source-code" id="options-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 1327</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">options</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">initheader</span> = <span class="ruby-keyword">nil</span>)
<span class="ruby-identifier">request</span>(<span class="ruby-constant">Options</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">initheader</span>))
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-patch" class="method-detail ">
<div class="method-heading">
<span class="method-name">patch</span><span
class="method-args">(path, data, initheader = nil, dest = nil) { |body_segment| ... }</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Sends a PATCH request to the <code>path</code> and gets a response, as an <a href="HTTPResponse.html"><code>HTTPResponse</code></a> object.</p>
<div class="method-source-code" id="patch-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 1299</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">patch</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">data</span>, <span class="ruby-identifier">initheader</span> = <span class="ruby-keyword">nil</span>, <span class="ruby-identifier">dest</span> = <span class="ruby-keyword">nil</span>, <span class="ruby-operator">&</span><span class="ruby-identifier">block</span>) <span class="ruby-comment"># :yield: +body_segment+</span>
<span class="ruby-identifier">send_entity</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">data</span>, <span class="ruby-identifier">initheader</span>, <span class="ruby-identifier">dest</span>, <span class="ruby-constant">Patch</span>, <span class="ruby-operator">&</span><span class="ruby-identifier">block</span>)
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-peer_cert" class="method-detail ">
<div class="method-heading">
<span class="method-name">peer_cert</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Returns the X.509 certificates the server presented.</p>
<div class="method-source-code" id="peer_cert-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 912</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">peer_cert</span>
<span class="ruby-keyword">if</span> <span class="ruby-keyword">not</span> <span class="ruby-identifier">use_ssl?</span> <span class="ruby-keyword">or</span> <span class="ruby-keyword">not</span> <span class="ruby-ivar">@socket</span>
<span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span>
<span class="ruby-keyword">end</span>
<span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">io</span>.<span class="ruby-identifier">peer_cert</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-post" class="method-detail ">
<div class="method-heading">
<span class="method-name">post</span><span
class="method-args">(path, data, initheader = nil, dest = nil) { |body_segment| ... }</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Posts <code>data</code> (must be a <a href="../String.html"><code>String</code></a>) to <code>path</code>. <code>header</code> must be a <a href="../Hash.html"><code>Hash</code></a> like { 'Accept' => '<strong>/</strong>', … }.</p>
<p>This method returns a <a href="HTTPResponse.html"><code>Net::HTTPResponse</code></a> object.</p>
<p>If called with a block, yields each fragment of the entity body in turn as a string as it is read from the socket. Note that in this case, the returned response object will <strong>not</strong> contain a (meaningful) body.</p>
<p><code>dest</code> argument is obsolete. It still works but you must not use it.</p>
<p>This method never raises exception.</p>
<pre class="ruby"><span class="ruby-identifier">response</span> = <span class="ruby-identifier">http</span>.<span class="ruby-identifier">post</span>(<span class="ruby-string">'/cgi-bin/search.rb'</span>, <span class="ruby-string">'query=foo'</span>)
<span class="ruby-comment"># using block</span>
<span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-string">'result.txt'</span>, <span class="ruby-string">'w'</span>) {<span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">http</span>.<span class="ruby-identifier">post</span>(<span class="ruby-string">'/cgi-bin/search.rb'</span>, <span class="ruby-string">'query=foo'</span>) <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">str</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">f</span>.<span class="ruby-identifier">write</span> <span class="ruby-identifier">str</span>
<span class="ruby-keyword">end</span>
}
</pre>
<p>You should set Content-Type: header field for POST. If no Content-Type: field given, this method uses “application/x-www-form-urlencoded” by default.</p>
<div class="method-source-code" id="post-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 1293</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">post</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">data</span>, <span class="ruby-identifier">initheader</span> = <span class="ruby-keyword">nil</span>, <span class="ruby-identifier">dest</span> = <span class="ruby-keyword">nil</span>, <span class="ruby-operator">&</span><span class="ruby-identifier">block</span>) <span class="ruby-comment"># :yield: +body_segment+</span>
<span class="ruby-identifier">send_entity</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">data</span>, <span class="ruby-identifier">initheader</span>, <span class="ruby-identifier">dest</span>, <span class="ruby-constant">Post</span>, <span class="ruby-operator">&</span><span class="ruby-identifier">block</span>)
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-post2" class="method-detail method-alias">
<div class="method-heading">
<span class="method-name">post2</span><span
class="method-args">(path, data, initheader = nil)</span>
</div>
<div class="method-description">
</div>
<div class="aliases">
Alias for: <a href="HTTP.html#method-i-request_post">request_post</a>
</div>
</div>
<div id="method-i-propfind" class="method-detail ">
<div class="method-heading">
<span class="method-name">propfind</span><span
class="method-args">(path, body = nil, initheader = {'Depth' => '0'})</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Sends a PROPFIND request to the <code>path</code> and gets a response, as an <a href="HTTPResponse.html"><code>HTTPResponse</code></a> object.</p>
<div class="method-source-code" id="propfind-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 1333</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">propfind</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">body</span> = <span class="ruby-keyword">nil</span>, <span class="ruby-identifier">initheader</span> = {<span class="ruby-string">'Depth'</span> <span class="ruby-operator">=></span> <span class="ruby-string">'0'</span>})
<span class="ruby-identifier">request</span>(<span class="ruby-constant">Propfind</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">initheader</span>), <span class="ruby-identifier">body</span>)
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-proppatch" class="method-detail ">
<div class="method-heading">
<span class="method-name">proppatch</span><span
class="method-args">(path, body, initheader = nil)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Sends a PROPPATCH request to the <code>path</code> and gets a response, as an <a href="HTTPResponse.html"><code>HTTPResponse</code></a> object.</p>
<div class="method-source-code" id="proppatch-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 1309</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">proppatch</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">body</span>, <span class="ruby-identifier">initheader</span> = <span class="ruby-keyword">nil</span>)
<span class="ruby-identifier">request</span>(<span class="ruby-constant">Proppatch</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">initheader</span>), <span class="ruby-identifier">body</span>)
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-proxy-3F" class="method-detail ">
<div class="method-heading">
<span class="method-name">proxy?</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>True if requests for this connection will be proxied</p>
<div class="method-source-code" id="proxy-3F-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 1108</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">proxy?</span>
<span class="ruby-operator">!</span><span class="ruby-operator">!</span>(<span class="ruby-ivar">@proxy_from_env</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">proxy_uri</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@proxy_address</span>)
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-proxy_address" class="method-detail ">
<div class="method-heading">
<span class="method-name">proxy_address</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>The address of the proxy server, if one is configured.</p>
<div class="method-source-code" id="proxy_address-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 1127</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">proxy_address</span>
<span class="ruby-keyword">if</span> <span class="ruby-ivar">@proxy_from_env</span> <span class="ruby-keyword">then</span>
<span class="ruby-identifier">proxy_uri</span>&.<span class="ruby-identifier">hostname</span>
<span class="ruby-keyword">else</span>
<span class="ruby-ivar">@proxy_address</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
<div class="aliases">
Also aliased as: <a href="HTTP.html#method-i-proxyaddr">proxyaddr</a>
</div>
</div>
<div id="method-i-proxy_from_env-3F" class="method-detail ">
<div class="method-heading">
<span class="method-name">proxy_from_env?</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>True if the proxy for this connection is determined from the environment</p>
<div class="method-source-code" id="proxy_from_env-3F-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 1113</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">proxy_from_env?</span>
<span class="ruby-ivar">@proxy_from_env</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-proxy_pass" class="method-detail ">
<div class="method-heading">
<span class="method-name">proxy_pass</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>The password of the proxy server, if one is configured.</p>
<div class="method-source-code" id="proxy_pass-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 1161</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">proxy_pass</span>
<span class="ruby-keyword">if</span> <span class="ruby-constant">ENVIRONMENT_VARIABLE_IS_MULTIUSER_SAFE</span> <span class="ruby-operator">&&</span> <span class="ruby-ivar">@proxy_from_env</span>
<span class="ruby-identifier">proxy_uri</span>&.<span class="ruby-identifier">password</span>
<span class="ruby-keyword">else</span>
<span class="ruby-ivar">@proxy_pass</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-proxy_port" class="method-detail ">
<div class="method-heading">
<span class="method-name">proxy_port</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>The port of the proxy server, if one is configured.</p>
<div class="method-source-code" id="proxy_port-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 1136</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">proxy_port</span>
<span class="ruby-keyword">if</span> <span class="ruby-ivar">@proxy_from_env</span> <span class="ruby-keyword">then</span>
<span class="ruby-identifier">proxy_uri</span>&.<span class="ruby-identifier">port</span>
<span class="ruby-keyword">else</span>
<span class="ruby-ivar">@proxy_port</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
<div class="aliases">
Also aliased as: <a href="HTTP.html#method-i-proxyport">proxyport</a>
</div>
</div>
<div id="method-i-proxy_user" class="method-detail ">
<div class="method-heading">
<span class="method-name">proxy_user</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>The username of the proxy server, if one is configured.</p>
<div class="method-source-code" id="proxy_user-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 1152</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">proxy_user</span>
<span class="ruby-keyword">if</span> <span class="ruby-constant">ENVIRONMENT_VARIABLE_IS_MULTIUSER_SAFE</span> <span class="ruby-operator">&&</span> <span class="ruby-ivar">@proxy_from_env</span>
<span class="ruby-identifier">proxy_uri</span>&.<span class="ruby-identifier">user</span>
<span class="ruby-keyword">else</span>
<span class="ruby-ivar">@proxy_user</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-proxyaddr" class="method-detail method-alias">
<div class="method-heading">
<span class="method-name">proxyaddr</span><span
class="method-args">()</span>
</div>
<div class="method-description">
</div>
<div class="aliases">
Alias for: <a href="HTTP.html#method-i-proxy_address">proxy_address</a>
</div>
</div>
<div id="method-i-proxyport" class="method-detail method-alias">
<div class="method-heading">
<span class="method-name">proxyport</span><span
class="method-args">()</span>
</div>
<div class="method-description">
</div>
<div class="aliases">
Alias for: <a href="HTTP.html#method-i-proxy_port">proxy_port</a>
</div>
</div>
<div id="method-i-read_timeout-3D" class="method-detail ">
<div class="method-heading">
<span class="method-name">read_timeout=</span><span
class="method-args">(sec)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Setter for the <a href="HTTP.html#attribute-i-read_timeout"><code>read_timeout</code></a> attribute.</p>
<div class="method-source-code" id="read_timeout-3D-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 779</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">read_timeout=</span>(<span class="ruby-identifier">sec</span>)
<span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">read_timeout</span> = <span class="ruby-identifier">sec</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@socket</span>
<span class="ruby-ivar">@read_timeout</span> = <span class="ruby-identifier">sec</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-request" class="method-detail ">
<div class="method-heading">
<span class="method-name">request</span><span
class="method-args">(req, body = nil) { |response| ... }</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Sends an <a href="HTTPRequest.html"><code>HTTPRequest</code></a> object <code>req</code> to the <a href="HTTP.html"><code>HTTP</code></a> server.</p>
<p>If <code>req</code> is a <a href="HTTP/Post.html"><code>Net::HTTP::Post</code></a> or <a href="HTTP/Put.html"><code>Net::HTTP::Put</code></a> request containing data, the data is also sent. Providing data for a <a href="HTTP/Head.html"><code>Net::HTTP::Head</code></a> or <a href="HTTP/Get.html"><code>Net::HTTP::Get</code></a> request results in an <a href="../ArgumentError.html"><code>ArgumentError</code></a>.</p>
<p>Returns an <a href="HTTPResponse.html"><code>HTTPResponse</code></a> object.</p>
<p>When called with a block, passes an <a href="HTTPResponse.html"><code>HTTPResponse</code></a> object to the block. The body of the response will not have been read yet; the block can process it using <a href="HTTPResponse.html#method-i-read_body"><code>HTTPResponse#read_body</code></a>, if desired.</p>
<p>This method never raises Net::* exceptions.</p>
<div class="method-source-code" id="request-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 1481</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">request</span>(<span class="ruby-identifier">req</span>, <span class="ruby-identifier">body</span> = <span class="ruby-keyword">nil</span>, <span class="ruby-operator">&</span><span class="ruby-identifier">block</span>) <span class="ruby-comment"># :yield: +response+</span>
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">started?</span>
<span class="ruby-identifier">start</span> {
<span class="ruby-identifier">req</span>[<span class="ruby-string">'connection'</span>] <span class="ruby-operator">||=</span> <span class="ruby-string">'close'</span>
<span class="ruby-keyword">return</span> <span class="ruby-identifier">request</span>(<span class="ruby-identifier">req</span>, <span class="ruby-identifier">body</span>, <span class="ruby-operator">&</span><span class="ruby-identifier">block</span>)
}
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">proxy_user</span>()
<span class="ruby-identifier">req</span>.<span class="ruby-identifier">proxy_basic_auth</span> <span class="ruby-identifier">proxy_user</span>(), <span class="ruby-identifier">proxy_pass</span>() <span class="ruby-keyword">unless</span> <span class="ruby-identifier">use_ssl?</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">req</span>.<span class="ruby-identifier">set_body_internal</span> <span class="ruby-identifier">body</span>
<span class="ruby-identifier">res</span> = <span class="ruby-identifier">transport_request</span>(<span class="ruby-identifier">req</span>, <span class="ruby-operator">&</span><span class="ruby-identifier">block</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">sspi_auth?</span>(<span class="ruby-identifier">res</span>)
<span class="ruby-identifier">sspi_auth</span>(<span class="ruby-identifier">req</span>)
<span class="ruby-identifier">res</span> = <span class="ruby-identifier">transport_request</span>(<span class="ruby-identifier">req</span>, <span class="ruby-operator">&</span><span class="ruby-identifier">block</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">res</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-request_get" class="method-detail ">
<div class="method-heading">
<span class="method-name">request_get</span><span
class="method-args">(path, initheader = nil) { |response| ... }</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Sends a GET request to the <code>path</code>. Returns the response as a <a href="HTTPResponse.html"><code>Net::HTTPResponse</code></a> object.</p>
<p>When called with a block, passes an <a href="HTTPResponse.html"><code>HTTPResponse</code></a> object to the block. The body of the response will not have been read yet; the block can process it using <a href="HTTPResponse.html#method-i-read_body"><code>HTTPResponse#read_body</code></a>, if desired.</p>
<p>Returns the response.</p>
<p>This method never raises Net::* exceptions.</p>
<pre class="ruby"><span class="ruby-identifier">response</span> = <span class="ruby-identifier">http</span>.<span class="ruby-identifier">request_get</span>(<span class="ruby-string">'/index.html'</span>)
<span class="ruby-comment"># The entity body is already read in this case.</span>
<span class="ruby-identifier">p</span> <span class="ruby-identifier">response</span>[<span class="ruby-string">'content-type'</span>]
<span class="ruby-identifier">puts</span> <span class="ruby-identifier">response</span>.<span class="ruby-identifier">body</span>
<span class="ruby-comment"># Using a block</span>
<span class="ruby-identifier">http</span>.<span class="ruby-identifier">request_get</span>(<span class="ruby-string">'/index.html'</span>) {<span class="ruby-operator">|</span><span class="ruby-identifier">response</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">p</span> <span class="ruby-identifier">response</span>[<span class="ruby-string">'content-type'</span>]
<span class="ruby-identifier">response</span>.<span class="ruby-identifier">read_body</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">str</span><span class="ruby-operator">|</span> <span class="ruby-comment"># read body now</span>
<span class="ruby-identifier">print</span> <span class="ruby-identifier">str</span>
<span class="ruby-keyword">end</span>
}
</pre>
<div class="method-source-code" id="request_get-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 1392</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">request_get</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">initheader</span> = <span class="ruby-keyword">nil</span>, <span class="ruby-operator">&</span><span class="ruby-identifier">block</span>) <span class="ruby-comment"># :yield: +response+</span>
<span class="ruby-identifier">request</span>(<span class="ruby-constant">Get</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">initheader</span>), <span class="ruby-operator">&</span><span class="ruby-identifier">block</span>)
<span class="ruby-keyword">end</span></pre>
</div>
</div>
<div class="aliases">
Also aliased as: <a href="HTTP.html#method-i-get2">get2</a>
</div>
</div>
<div id="method-i-request_head" class="method-detail ">
<div class="method-heading">
<span class="method-name">request_head</span><span
class="method-args">(path, initheader = nil, &block)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Sends a HEAD request to the <code>path</code> and returns the response as a <a href="HTTPResponse.html"><code>Net::HTTPResponse</code></a> object.</p>
<p>Returns the response.</p>
<p>This method never raises Net::* exceptions.</p>
<pre class="ruby"><span class="ruby-identifier">response</span> = <span class="ruby-identifier">http</span>.<span class="ruby-identifier">request_head</span>(<span class="ruby-string">'/index.html'</span>)
<span class="ruby-identifier">p</span> <span class="ruby-identifier">response</span>[<span class="ruby-string">'content-type'</span>]
</pre>
<div class="method-source-code" id="request_head-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 1406</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">request_head</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">initheader</span> = <span class="ruby-keyword">nil</span>, <span class="ruby-operator">&</span><span class="ruby-identifier">block</span>)
<span class="ruby-identifier">request</span>(<span class="ruby-constant">Head</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">initheader</span>), <span class="ruby-operator">&</span><span class="ruby-identifier">block</span>)
<span class="ruby-keyword">end</span></pre>
</div>
</div>
<div class="aliases">
Also aliased as: <a href="HTTP.html#method-i-head2">head2</a>
</div>
</div>
<div id="method-i-request_post" class="method-detail ">
<div class="method-heading">
<span class="method-name">request_post</span><span
class="method-args">(path, data, initheader = nil) { |response| ... }</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Sends a POST request to the <code>path</code>.</p>
<p>Returns the response as a <a href="HTTPResponse.html"><code>Net::HTTPResponse</code></a> object.</p>
<p>When called with a block, the block is passed an <a href="HTTPResponse.html"><code>HTTPResponse</code></a> object. The body of that response will not have been read yet; the block can process it using <a href="HTTPResponse.html#method-i-read_body"><code>HTTPResponse#read_body</code></a>, if desired.</p>
<p>Returns the response.</p>
<p>This method never raises Net::* exceptions.</p>
<pre class="ruby"><span class="ruby-comment"># example</span>
<span class="ruby-identifier">response</span> = <span class="ruby-identifier">http</span>.<span class="ruby-identifier">request_post</span>(<span class="ruby-string">'/cgi-bin/nice.rb'</span>, <span class="ruby-string">'datadatadata...'</span>)
<span class="ruby-identifier">p</span> <span class="ruby-identifier">response</span>.<span class="ruby-identifier">status</span>
<span class="ruby-identifier">puts</span> <span class="ruby-identifier">response</span>.<span class="ruby-identifier">body</span> <span class="ruby-comment"># body is already read in this case</span>
<span class="ruby-comment"># using block</span>
<span class="ruby-identifier">http</span>.<span class="ruby-identifier">request_post</span>(<span class="ruby-string">'/cgi-bin/nice.rb'</span>, <span class="ruby-string">'datadatadata...'</span>) {<span class="ruby-operator">|</span><span class="ruby-identifier">response</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">p</span> <span class="ruby-identifier">response</span>.<span class="ruby-identifier">status</span>
<span class="ruby-identifier">p</span> <span class="ruby-identifier">response</span>[<span class="ruby-string">'content-type'</span>]
<span class="ruby-identifier">response</span>.<span class="ruby-identifier">read_body</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">str</span><span class="ruby-operator">|</span> <span class="ruby-comment"># read body now</span>
<span class="ruby-identifier">print</span> <span class="ruby-identifier">str</span>
<span class="ruby-keyword">end</span>
}
</pre>
<div class="method-source-code" id="request_post-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 1436</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">request_post</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">data</span>, <span class="ruby-identifier">initheader</span> = <span class="ruby-keyword">nil</span>, <span class="ruby-operator">&</span><span class="ruby-identifier">block</span>) <span class="ruby-comment"># :yield: +response+</span>
<span class="ruby-identifier">request</span> <span class="ruby-constant">Post</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">initheader</span>), <span class="ruby-identifier">data</span>, <span class="ruby-operator">&</span><span class="ruby-identifier">block</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
<div class="aliases">
Also aliased as: <a href="HTTP.html#method-i-post2">post2</a>
</div>
</div>
<div id="method-i-send_request" class="method-detail ">
<div class="method-heading">
<span class="method-name">send_request</span><span
class="method-args">(name, path, data = nil, header = nil)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Sends an <a href="HTTP.html"><code>HTTP</code></a> request to the <a href="HTTP.html"><code>HTTP</code></a> server. Also sends a DATA string if <code>data</code> is given.</p>
<p>Returns a <a href="HTTPResponse.html"><code>Net::HTTPResponse</code></a> object.</p>
<p>This method never raises Net::* exceptions.</p>
<pre class="ruby"><span class="ruby-identifier">response</span> = <span class="ruby-identifier">http</span>.<span class="ruby-identifier">send_request</span>(<span class="ruby-string">'GET'</span>, <span class="ruby-string">'/index.html'</span>)
<span class="ruby-identifier">puts</span> <span class="ruby-identifier">response</span>.<span class="ruby-identifier">body</span>
</pre>
<div class="method-source-code" id="send_request-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 1460</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">send_request</span>(<span class="ruby-identifier">name</span>, <span class="ruby-identifier">path</span>, <span class="ruby-identifier">data</span> = <span class="ruby-keyword">nil</span>, <span class="ruby-identifier">header</span> = <span class="ruby-keyword">nil</span>)
<span class="ruby-identifier">has_response_body</span> = <span class="ruby-identifier">name</span> <span class="ruby-operator">!=</span> <span class="ruby-string">'HEAD'</span>
<span class="ruby-identifier">r</span> = <span class="ruby-constant">HTTPGenericRequest</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">name</span>,(<span class="ruby-identifier">data</span> <span class="ruby-operator">?</span> <span class="ruby-keyword">true</span> <span class="ruby-operator">:</span> <span class="ruby-keyword">false</span>),<span class="ruby-identifier">has_response_body</span>,<span class="ruby-identifier">path</span>,<span class="ruby-identifier">header</span>)
<span class="ruby-identifier">request</span> <span class="ruby-identifier">r</span>, <span class="ruby-identifier">data</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-set_debug_output" class="method-detail ">
<div class="method-heading">
<span class="method-name">set_debug_output</span><span
class="method-args">(output)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p><strong>WARNING</strong> This method opens a serious security hole. Never use this method in production code.</p>
<p>Sets an output stream for debugging.</p>
<pre>http = Net::HTTP.new(hostname)
http.set_debug_output $stderr
http.start { .... }</pre>
<div class="method-source-code" id="set_debug_output-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 709</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">set_debug_output</span>(<span class="ruby-identifier">output</span>)
<span class="ruby-identifier">warn</span> <span class="ruby-string">'Net::HTTP#set_debug_output called after HTTP started'</span>, <span class="ruby-value">uplevel:</span> <span class="ruby-value">1</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">started?</span>
<span class="ruby-ivar">@debug_output</span> = <span class="ruby-identifier">output</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-start" class="method-detail ">
<div class="method-heading">
<span class="method-name">start</span><span
class="method-args">() { |http| ... }</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Opens a TCP connection and <a href="HTTP.html"><code>HTTP</code></a> session.</p>
<p>When this method is called with a block, it passes the <a href="HTTP.html"><code>Net::HTTP</code></a> object to the block, and closes the TCP connection and <a href="HTTP.html"><code>HTTP</code></a> session after the block has been executed.</p>
<p>When called with a block, it returns the return value of the block; otherwise, it returns self.</p>
<div class="method-source-code" id="start-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 928</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">start</span> <span class="ruby-comment"># :yield: http</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">IOError</span>, <span class="ruby-string">'HTTP session already opened'</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@started</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">block_given?</span>
<span class="ruby-keyword">begin</span>
<span class="ruby-identifier">do_start</span>
<span class="ruby-keyword">return</span> <span class="ruby-keyword">yield</span>(<span class="ruby-keyword">self</span>)
<span class="ruby-keyword">ensure</span>
<span class="ruby-identifier">do_finish</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">do_start</span>
<span class="ruby-keyword">self</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-started-3F" class="method-detail ">
<div class="method-heading">
<span class="method-name">started?</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Returns true if the <a href="HTTP.html"><code>HTTP</code></a> session has been started.</p>
<div class="method-source-code" id="started-3F-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 808</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">started?</span>
<span class="ruby-ivar">@started</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
<div class="aliases">
Also aliased as: <a href="HTTP.html#method-i-active-3F">active?</a>
</div>
</div>
<div id="method-i-trace" class="method-detail ">
<div class="method-heading">
<span class="method-name">trace</span><span
class="method-args">(path, initheader = nil)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Sends a TRACE request to the <code>path</code> and gets a response, as an <a href="HTTPResponse.html"><code>HTTPResponse</code></a> object.</p>
<div class="method-source-code" id="trace-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 1363</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">trace</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">initheader</span> = <span class="ruby-keyword">nil</span>)
<span class="ruby-identifier">request</span>(<span class="ruby-constant">Trace</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">initheader</span>))
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-unlock" class="method-detail ">
<div class="method-heading">
<span class="method-name">unlock</span><span
class="method-args">(path, body, initheader = nil)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Sends a UNLOCK request to the <code>path</code> and gets a response, as an <a href="HTTPResponse.html"><code>HTTPResponse</code></a> object.</p>
<div class="method-source-code" id="unlock-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 1321</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">unlock</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">body</span>, <span class="ruby-identifier">initheader</span> = <span class="ruby-keyword">nil</span>)
<span class="ruby-identifier">request</span>(<span class="ruby-constant">Unlock</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">initheader</span>), <span class="ruby-identifier">body</span>)
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-use_ssl-3D" class="method-detail ">
<div class="method-heading">
<span class="method-name">use_ssl=</span><span
class="method-args">(flag)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Turn on/off SSL. This flag must be set before starting session. If you change use_ssl value after session started, a <a href="HTTP.html"><code>Net::HTTP</code></a> object raises <a href="../IOError.html"><code>IOError</code></a>.</p>
<div class="method-source-code" id="use_ssl-3D-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 825</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">use_ssl=</span>(<span class="ruby-identifier">flag</span>)
<span class="ruby-identifier">flag</span> = <span class="ruby-identifier">flag</span> <span class="ruby-operator">?</span> <span class="ruby-keyword">true</span> <span class="ruby-operator">:</span> <span class="ruby-keyword">false</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">started?</span> <span class="ruby-keyword">and</span> <span class="ruby-ivar">@use_ssl</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">flag</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">IOError</span>, <span class="ruby-string">"use_ssl value changed, but session already started"</span>
<span class="ruby-keyword">end</span>
<span class="ruby-ivar">@use_ssl</span> = <span class="ruby-identifier">flag</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-use_ssl-3F" class="method-detail ">
<div class="method-heading">
<span class="method-name">use_ssl?</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Returns true if SSL/TLS is being used with <a href="HTTP.html"><code>HTTP</code></a>.</p>
<div class="method-source-code" id="use_ssl-3F-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 817</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">use_ssl?</span>
<span class="ruby-ivar">@use_ssl</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-write_timeout-3D" class="method-detail ">
<div class="method-heading">
<span class="method-name">write_timeout=</span><span
class="method-args">(sec)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Setter for the <a href="HTTP.html#attribute-i-write_timeout"><code>write_timeout</code></a> attribute.</p>
<div class="method-source-code" id="write_timeout-3D-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 785</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">write_timeout=</span>(<span class="ruby-identifier">sec</span>)
<span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">write_timeout</span> = <span class="ruby-identifier">sec</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@socket</span>
<span class="ruby-ivar">@write_timeout</span> = <span class="ruby-identifier">sec</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-D" class="method-detail ">
<div class="method-heading">
<span class="method-name">D</span><span
class="method-args">(msg)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="D-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 1655</span>
<span class="ruby-keyword">def</span> <span class="ruby-constant">D</span>(<span class="ruby-identifier ruby-title">msg</span>)
<span class="ruby-keyword">return</span> <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@debug_output</span>
<span class="ruby-ivar">@debug_output</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">msg</span>
<span class="ruby-ivar">@debug_output</span> <span class="ruby-operator"><<</span> <span class="ruby-string">"\n"</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-addr_port" class="method-detail ">
<div class="method-heading">
<span class="method-name">addr_port</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>utils</p>
<div class="method-source-code" id="addr_port-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 1648</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">addr_port</span>
<span class="ruby-identifier">addr</span> = <span class="ruby-identifier">address</span>
<span class="ruby-identifier">addr</span> = <span class="ruby-node">"[#{addr}]"</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">addr</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-string">":"</span>)
<span class="ruby-identifier">default_port</span> = <span class="ruby-identifier">use_ssl?</span> <span class="ruby-operator">?</span> <span class="ruby-constant">HTTP</span>.<span class="ruby-identifier">https_default_port</span> <span class="ruby-operator">:</span> <span class="ruby-constant">HTTP</span>.<span class="ruby-identifier">http_default_port</span>
<span class="ruby-identifier">default_port</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">port</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">addr</span> <span class="ruby-operator">:</span> <span class="ruby-node">"#{addr}:#{port}"</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-begin_transport" class="method-detail ">
<div class="method-heading">
<span class="method-name">begin_transport</span><span
class="method-args">(req)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="begin_transport-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 1565</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">begin_transport</span>(<span class="ruby-identifier">req</span>)
<span class="ruby-keyword">if</span> <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">closed?</span>
<span class="ruby-identifier">connect</span>
<span class="ruby-keyword">elsif</span> <span class="ruby-ivar">@last_communicated</span>
<span class="ruby-keyword">if</span> <span class="ruby-ivar">@last_communicated</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@keep_alive_timeout</span> <span class="ruby-operator"><</span> <span class="ruby-constant">Process</span>.<span class="ruby-identifier">clock_gettime</span>(<span class="ruby-constant">Process</span><span class="ruby-operator">::</span><span class="ruby-constant">CLOCK_MONOTONIC</span>)
<span class="ruby-constant">D</span> <span class="ruby-string">'Conn close because of keep_alive_timeout'</span>
<span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">close</span>
<span class="ruby-identifier">connect</span>
<span class="ruby-keyword">elsif</span> <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">io</span>.<span class="ruby-identifier">to_io</span>.<span class="ruby-identifier">wait_readable</span>(<span class="ruby-value">0</span>) <span class="ruby-operator">&&</span> <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">eof?</span>
<span class="ruby-constant">D</span> <span class="ruby-string">"Conn close because of EOF"</span>
<span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">close</span>
<span class="ruby-identifier">connect</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-keyword">not</span> <span class="ruby-identifier">req</span>.<span class="ruby-identifier">response_body_permitted?</span> <span class="ruby-keyword">and</span> <span class="ruby-ivar">@close_on_empty_response</span>
<span class="ruby-identifier">req</span>[<span class="ruby-string">'connection'</span>] <span class="ruby-operator">||=</span> <span class="ruby-string">'close'</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">req</span>.<span class="ruby-identifier">update_uri</span> <span class="ruby-identifier">address</span>, <span class="ruby-identifier">port</span>, <span class="ruby-identifier">use_ssl?</span>
<span class="ruby-identifier">req</span>[<span class="ruby-string">'host'</span>] <span class="ruby-operator">||=</span> <span class="ruby-identifier">addr_port</span>()
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-connect" class="method-detail ">
<div class="method-heading">
<span class="method-name">connect</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="connect-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 948</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">connect</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">proxy?</span> <span class="ruby-keyword">then</span>
<span class="ruby-identifier">conn_addr</span> = <span class="ruby-identifier">proxy_address</span>
<span class="ruby-identifier">conn_port</span> = <span class="ruby-identifier">proxy_port</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">conn_addr</span> = <span class="ruby-identifier">conn_address</span>
<span class="ruby-identifier">conn_port</span> = <span class="ruby-identifier">port</span>
<span class="ruby-keyword">end</span>
<span class="ruby-constant">D</span> <span class="ruby-node">"opening connection to #{conn_addr}:#{conn_port}..."</span>
<span class="ruby-identifier">s</span> = <span class="ruby-constant">Timeout</span>.<span class="ruby-identifier">timeout</span>(<span class="ruby-ivar">@open_timeout</span>, <span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">OpenTimeout</span>) {
<span class="ruby-keyword">begin</span>
<span class="ruby-constant">TCPSocket</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">conn_addr</span>, <span class="ruby-identifier">conn_port</span>, <span class="ruby-ivar">@local_host</span>, <span class="ruby-ivar">@local_port</span>)
<span class="ruby-keyword">rescue</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">e</span>
<span class="ruby-identifier">raise</span> <span class="ruby-identifier">e</span>, <span class="ruby-string">"Failed to open TCP connection to "</span> <span class="ruby-operator">+</span>
<span class="ruby-node">"#{conn_addr}:#{conn_port} (#{e.message})"</span>
<span class="ruby-keyword">end</span>
}
<span class="ruby-identifier">s</span>.<span class="ruby-identifier">setsockopt</span>(<span class="ruby-constant">Socket</span><span class="ruby-operator">::</span><span class="ruby-constant">IPPROTO_TCP</span>, <span class="ruby-constant">Socket</span><span class="ruby-operator">::</span><span class="ruby-constant">TCP_NODELAY</span>, <span class="ruby-value">1</span>)
<span class="ruby-constant">D</span> <span class="ruby-string">"opened"</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">use_ssl?</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">proxy?</span>
<span class="ruby-identifier">plain_sock</span> = <span class="ruby-constant">BufferedIO</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">s</span>, <span class="ruby-value">read_timeout:</span> <span class="ruby-ivar">@read_timeout</span>,
<span class="ruby-value">write_timeout:</span> <span class="ruby-ivar">@write_timeout</span>,
<span class="ruby-value">continue_timeout:</span> <span class="ruby-ivar">@continue_timeout</span>,
<span class="ruby-value">debug_output:</span> <span class="ruby-ivar">@debug_output</span>)
<span class="ruby-identifier">buf</span> = <span class="ruby-node">"CONNECT #{conn_address}:#{@port} HTTP/#{HTTPVersion}\r\n"</span>
<span class="ruby-identifier">buf</span> <span class="ruby-operator"><<</span> <span class="ruby-node">"Host: #{@address}:#{@port}\r\n"</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">proxy_user</span>
<span class="ruby-identifier">credential</span> = [<span class="ruby-node">"#{proxy_user}:#{proxy_pass}"</span>].<span class="ruby-identifier">pack</span>(<span class="ruby-string">'m0'</span>)
<span class="ruby-identifier">buf</span> <span class="ruby-operator"><<</span> <span class="ruby-node">"Proxy-Authorization: Basic #{credential}\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">plain_sock</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">buf</span>)
<span class="ruby-constant">HTTPResponse</span>.<span class="ruby-identifier">read_new</span>(<span class="ruby-identifier">plain_sock</span>).<span class="ruby-identifier">value</span>
<span class="ruby-comment"># assuming nothing left in buffers after successful CONNECT response</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">ssl_parameters</span> = <span class="ruby-constant">Hash</span>.<span class="ruby-identifier">new</span>
<span class="ruby-identifier">iv_list</span> = <span class="ruby-identifier">instance_variables</span>
<span class="ruby-constant">SSL_IVNAMES</span>.<span class="ruby-identifier">each_with_index</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">ivname</span>, <span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">iv_list</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">ivname</span>) <span class="ruby-keyword">and</span>
<span class="ruby-identifier">value</span> = <span class="ruby-identifier">instance_variable_get</span>(<span class="ruby-identifier">ivname</span>)
<span class="ruby-identifier">ssl_parameters</span>[<span class="ruby-constant">SSL_ATTRIBUTES</span>[<span class="ruby-identifier">i</span>]] = <span class="ruby-identifier">value</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">value</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-ivar">@ssl_context</span> = <span class="ruby-constant">OpenSSL</span><span class="ruby-operator">::</span><span class="ruby-constant">SSL</span><span class="ruby-operator">::</span><span class="ruby-constant">SSLContext</span>.<span class="ruby-identifier">new</span>
<span class="ruby-ivar">@ssl_context</span>.<span class="ruby-identifier">set_params</span>(<span class="ruby-identifier">ssl_parameters</span>)
<span class="ruby-ivar">@ssl_context</span>.<span class="ruby-identifier">session_cache_mode</span> =
<span class="ruby-constant">OpenSSL</span><span class="ruby-operator">::</span><span class="ruby-constant">SSL</span><span class="ruby-operator">::</span><span class="ruby-constant">SSLContext</span><span class="ruby-operator">::</span><span class="ruby-constant">SESSION_CACHE_CLIENT</span> <span class="ruby-operator">|</span>
<span class="ruby-constant">OpenSSL</span><span class="ruby-operator">::</span><span class="ruby-constant">SSL</span><span class="ruby-operator">::</span><span class="ruby-constant">SSLContext</span><span class="ruby-operator">::</span><span class="ruby-constant">SESSION_CACHE_NO_INTERNAL_STORE</span>
<span class="ruby-ivar">@ssl_context</span>.<span class="ruby-identifier">session_new_cb</span> = <span class="ruby-identifier">proc</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">sock</span>, <span class="ruby-identifier">sess</span><span class="ruby-operator">|</span> <span class="ruby-ivar">@ssl_session</span> = <span class="ruby-identifier">sess</span> }
<span class="ruby-constant">D</span> <span class="ruby-node">"starting SSL for #{conn_addr}:#{conn_port}..."</span>
<span class="ruby-identifier">s</span> = <span class="ruby-constant">OpenSSL</span><span class="ruby-operator">::</span><span class="ruby-constant">SSL</span><span class="ruby-operator">::</span><span class="ruby-constant">SSLSocket</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">s</span>, <span class="ruby-ivar">@ssl_context</span>)
<span class="ruby-identifier">s</span>.<span class="ruby-identifier">sync_close</span> = <span class="ruby-keyword">true</span>
<span class="ruby-comment"># Server Name Indication (SNI) RFC 3546</span>
<span class="ruby-identifier">s</span>.<span class="ruby-identifier">hostname</span> = <span class="ruby-ivar">@address</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">respond_to?</span> <span class="ruby-value">:hostname=</span>
<span class="ruby-keyword">if</span> <span class="ruby-ivar">@ssl_session</span> <span class="ruby-keyword">and</span>
<span class="ruby-constant">Process</span>.<span class="ruby-identifier">clock_gettime</span>(<span class="ruby-constant">Process</span><span class="ruby-operator">::</span><span class="ruby-constant">CLOCK_REALTIME</span>) <span class="ruby-operator"><</span> <span class="ruby-ivar">@ssl_session</span>.<span class="ruby-identifier">time</span>.<span class="ruby-identifier">to_f</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@ssl_session</span>.<span class="ruby-identifier">timeout</span>
<span class="ruby-identifier">s</span>.<span class="ruby-identifier">session</span> = <span class="ruby-ivar">@ssl_session</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">ssl_socket_connect</span>(<span class="ruby-identifier">s</span>, <span class="ruby-ivar">@open_timeout</span>)
<span class="ruby-keyword">if</span> <span class="ruby-ivar">@ssl_context</span>.<span class="ruby-identifier">verify_mode</span> <span class="ruby-operator">!=</span> <span class="ruby-constant">OpenSSL</span><span class="ruby-operator">::</span><span class="ruby-constant">SSL</span><span class="ruby-operator">::</span><span class="ruby-constant">VERIFY_NONE</span>
<span class="ruby-identifier">s</span>.<span class="ruby-identifier">post_connection_check</span>(<span class="ruby-ivar">@address</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-constant">D</span> <span class="ruby-node">"SSL established, protocol: #{s.ssl_version}, cipher: #{s.cipher[0]}"</span>
<span class="ruby-keyword">end</span>
<span class="ruby-ivar">@socket</span> = <span class="ruby-constant">BufferedIO</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">s</span>, <span class="ruby-value">read_timeout:</span> <span class="ruby-ivar">@read_timeout</span>,
<span class="ruby-value">write_timeout:</span> <span class="ruby-ivar">@write_timeout</span>,
<span class="ruby-value">continue_timeout:</span> <span class="ruby-ivar">@continue_timeout</span>,
<span class="ruby-value">debug_output:</span> <span class="ruby-ivar">@debug_output</span>)
<span class="ruby-identifier">on_connect</span>
<span class="ruby-keyword">rescue</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">exception</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">s</span>
<span class="ruby-constant">D</span> <span class="ruby-node">"Conn close because of connect error #{exception}"</span>
<span class="ruby-identifier">s</span>.<span class="ruby-identifier">close</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">raise</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-do_finish" class="method-detail ">
<div class="method-heading">
<span class="method-name">do_finish</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="do_finish-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 1040</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">do_finish</span>
<span class="ruby-ivar">@started</span> = <span class="ruby-keyword">false</span>
<span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">close</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@socket</span>
<span class="ruby-ivar">@socket</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-do_start" class="method-detail ">
<div class="method-heading">
<span class="method-name">do_start</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="do_start-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 942</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">do_start</span>
<span class="ruby-identifier">connect</span>
<span class="ruby-ivar">@started</span> = <span class="ruby-keyword">true</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-edit_path" class="method-detail ">
<div class="method-heading">
<span class="method-name">edit_path</span><span
class="method-args">(path)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="edit_path-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 1184</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">edit_path</span>(<span class="ruby-identifier">path</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">proxy?</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">path</span>.<span class="ruby-identifier">start_with?</span>(<span class="ruby-string">"ftp://"</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">use_ssl?</span>
<span class="ruby-identifier">path</span>
<span class="ruby-keyword">else</span>
<span class="ruby-node">"http://#{addr_port}#{path}"</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">path</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-end_transport" class="method-detail ">
<div class="method-heading">
<span class="method-name">end_transport</span><span
class="method-args">(req, res)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="end_transport-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 1588</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">end_transport</span>(<span class="ruby-identifier">req</span>, <span class="ruby-identifier">res</span>)
<span class="ruby-ivar">@curr_http_version</span> = <span class="ruby-identifier">res</span>.<span class="ruby-identifier">http_version</span>
<span class="ruby-ivar">@last_communicated</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-keyword">if</span> <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">closed?</span>
<span class="ruby-constant">D</span> <span class="ruby-string">'Conn socket closed'</span>
<span class="ruby-keyword">elsif</span> <span class="ruby-keyword">not</span> <span class="ruby-identifier">res</span>.<span class="ruby-identifier">body</span> <span class="ruby-keyword">and</span> <span class="ruby-ivar">@close_on_empty_response</span>
<span class="ruby-constant">D</span> <span class="ruby-string">'Conn close'</span>
<span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">close</span>
<span class="ruby-keyword">elsif</span> <span class="ruby-identifier">keep_alive?</span>(<span class="ruby-identifier">req</span>, <span class="ruby-identifier">res</span>)
<span class="ruby-constant">D</span> <span class="ruby-string">'Conn keep-alive'</span>
<span class="ruby-ivar">@last_communicated</span> = <span class="ruby-constant">Process</span>.<span class="ruby-identifier">clock_gettime</span>(<span class="ruby-constant">Process</span><span class="ruby-operator">::</span><span class="ruby-constant">CLOCK_MONOTONIC</span>)
<span class="ruby-keyword">else</span>
<span class="ruby-constant">D</span> <span class="ruby-string">'Conn close'</span>
<span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">close</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-keep_alive-3F" class="method-detail ">
<div class="method-heading">
<span class="method-name">keep_alive?</span><span
class="method-args">(req, res)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="keep_alive-3F-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 1605</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">keep_alive?</span>(<span class="ruby-identifier">req</span>, <span class="ruby-identifier">res</span>)
<span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">req</span>.<span class="ruby-identifier">connection_close?</span>
<span class="ruby-keyword">if</span> <span class="ruby-ivar">@curr_http_version</span> <span class="ruby-operator"><=</span> <span class="ruby-string">'1.0'</span>
<span class="ruby-identifier">res</span>.<span class="ruby-identifier">connection_keep_alive?</span>
<span class="ruby-keyword">else</span> <span class="ruby-comment"># HTTP/1.1 or later</span>
<span class="ruby-keyword">not</span> <span class="ruby-identifier">res</span>.<span class="ruby-identifier">connection_close?</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-on_connect" class="method-detail ">
<div class="method-heading">
<span class="method-name">on_connect</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="on_connect-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 1029</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">on_connect</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-send_entity" class="method-detail ">
<div class="method-heading">
<span class="method-name">send_entity</span><span
class="method-args">(path, data, initheader, dest, type, &block)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Executes a request which uses a representation and returns its body.</p>
<div class="method-source-code" id="send_entity-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 1504</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">send_entity</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">data</span>, <span class="ruby-identifier">initheader</span>, <span class="ruby-identifier">dest</span>, <span class="ruby-identifier">type</span>, <span class="ruby-operator">&</span><span class="ruby-identifier">block</span>)
<span class="ruby-identifier">res</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-identifier">request</span>(<span class="ruby-identifier">type</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">initheader</span>), <span class="ruby-identifier">data</span>) {<span class="ruby-operator">|</span><span class="ruby-identifier">r</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">r</span>.<span class="ruby-identifier">read_body</span> <span class="ruby-identifier">dest</span>, <span class="ruby-operator">&</span><span class="ruby-identifier">block</span>
<span class="ruby-identifier">res</span> = <span class="ruby-identifier">r</span>
}
<span class="ruby-identifier">res</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-sspi_auth" class="method-detail ">
<div class="method-heading">
<span class="method-name">sspi_auth</span><span
class="method-args">(req)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="sspi_auth-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 1629</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">sspi_auth</span>(<span class="ruby-identifier">req</span>)
<span class="ruby-identifier">n</span> = <span class="ruby-constant">Win32</span><span class="ruby-operator">::</span><span class="ruby-constant">SSPI</span><span class="ruby-operator">::</span><span class="ruby-constant">NegotiateAuth</span>.<span class="ruby-identifier">new</span>
<span class="ruby-identifier">req</span>[<span class="ruby-string">"Proxy-Authorization"</span>] = <span class="ruby-node">"Negotiate #{n.get_initial_token}"</span>
<span class="ruby-comment"># Some versions of ISA will close the connection if this isn't present.</span>
<span class="ruby-identifier">req</span>[<span class="ruby-string">"Connection"</span>] = <span class="ruby-string">"Keep-Alive"</span>
<span class="ruby-identifier">req</span>[<span class="ruby-string">"Proxy-Connection"</span>] = <span class="ruby-string">"Keep-Alive"</span>
<span class="ruby-identifier">res</span> = <span class="ruby-identifier">transport_request</span>(<span class="ruby-identifier">req</span>)
<span class="ruby-identifier">authphrase</span> = <span class="ruby-identifier">res</span>[<span class="ruby-string">"Proxy-Authenticate"</span>] <span class="ruby-keyword">or</span> <span class="ruby-keyword">return</span> <span class="ruby-identifier">res</span>
<span class="ruby-identifier">req</span>[<span class="ruby-string">"Proxy-Authorization"</span>] = <span class="ruby-node">"Negotiate #{n.complete_authentication(authphrase)}"</span>
<span class="ruby-keyword">rescue</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">err</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">HTTPAuthenticationError</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">'HTTP authentication failed'</span>, <span class="ruby-identifier">err</span>)
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-sspi_auth-3F" class="method-detail ">
<div class="method-heading">
<span class="method-name">sspi_auth?</span><span
class="method-args">(res)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="sspi_auth-3F-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 1614</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">sspi_auth?</span>(<span class="ruby-identifier">res</span>)
<span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span> <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@sspi_enabled</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">res</span>.<span class="ruby-identifier">kind_of?</span>(<span class="ruby-constant">HTTPProxyAuthenticationRequired</span>) <span class="ruby-keyword">and</span>
<span class="ruby-identifier">proxy?</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">res</span>[<span class="ruby-string">"Proxy-Authenticate"</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-string">"Negotiate"</span>)
<span class="ruby-keyword">begin</span>
<span class="ruby-identifier">require</span> <span class="ruby-string">'win32/sspi'</span>
<span class="ruby-keyword">true</span>
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">LoadError</span>
<span class="ruby-keyword">false</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">false</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-transport_request" class="method-detail ">
<div class="method-heading">
<span class="method-name">transport_request</span><span
class="method-args">(req) { |res| ... }</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="transport_request-source">
<pre><span class="ruby-comment"># File lib/net/http.rb, line 1515</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">transport_request</span>(<span class="ruby-identifier">req</span>)
<span class="ruby-identifier">count</span> = <span class="ruby-value">0</span>
<span class="ruby-keyword">begin</span>
<span class="ruby-identifier">begin_transport</span> <span class="ruby-identifier">req</span>
<span class="ruby-identifier">res</span> = <span class="ruby-identifier">catch</span>(<span class="ruby-value">:response</span>) {
<span class="ruby-keyword">begin</span>
<span class="ruby-identifier">req</span>.<span class="ruby-identifier">exec</span> <span class="ruby-ivar">@socket</span>, <span class="ruby-ivar">@curr_http_version</span>, <span class="ruby-identifier">edit_path</span>(<span class="ruby-identifier">req</span>.<span class="ruby-identifier">path</span>)
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Errno</span><span class="ruby-operator">::</span><span class="ruby-constant">EPIPE</span>
<span class="ruby-comment"># Failure when writing full request, but we can probably</span>
<span class="ruby-comment"># still read the received response.</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">begin</span>
<span class="ruby-identifier">res</span> = <span class="ruby-constant">HTTPResponse</span>.<span class="ruby-identifier">read_new</span>(<span class="ruby-ivar">@socket</span>)
<span class="ruby-identifier">res</span>.<span class="ruby-identifier">decode_content</span> = <span class="ruby-identifier">req</span>.<span class="ruby-identifier">decode_content</span>
<span class="ruby-keyword">end</span> <span class="ruby-keyword">while</span> <span class="ruby-identifier">res</span>.<span class="ruby-identifier">kind_of?</span>(<span class="ruby-constant">HTTPInformation</span>)
<span class="ruby-identifier">res</span>.<span class="ruby-identifier">uri</span> = <span class="ruby-identifier">req</span>.<span class="ruby-identifier">uri</span>
<span class="ruby-identifier">res</span>
}
<span class="ruby-identifier">res</span>.<span class="ruby-identifier">reading_body</span>(<span class="ruby-ivar">@socket</span>, <span class="ruby-identifier">req</span>.<span class="ruby-identifier">response_body_permitted?</span>) {
<span class="ruby-keyword">yield</span> <span class="ruby-identifier">res</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">block_given?</span>
}
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">OpenTimeout</span>
<span class="ruby-identifier">raise</span>
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">ReadTimeout</span>, <span class="ruby-constant">IOError</span>, <span class="ruby-constant">EOFError</span>,
<span class="ruby-constant">Errno</span><span class="ruby-operator">::</span><span class="ruby-constant">ECONNRESET</span>, <span class="ruby-constant">Errno</span><span class="ruby-operator">::</span><span class="ruby-constant">ECONNABORTED</span>, <span class="ruby-constant">Errno</span><span class="ruby-operator">::</span><span class="ruby-constant">EPIPE</span>, <span class="ruby-constant">Errno</span><span class="ruby-operator">::</span><span class="ruby-constant">ETIMEDOUT</span>,
<span class="ruby-comment"># avoid a dependency on OpenSSL</span>
<span class="ruby-keyword">defined?</span>(<span class="ruby-constant">OpenSSL</span><span class="ruby-operator">::</span><span class="ruby-constant">SSL</span>) <span class="ruby-operator">?</span> <span class="ruby-constant">OpenSSL</span><span class="ruby-operator">::</span><span class="ruby-constant">SSL</span><span class="ruby-operator">::</span><span class="ruby-constant">SSLError</span> <span class="ruby-operator">:</span> <span class="ruby-constant">IOError</span>,
<span class="ruby-constant">Timeout</span><span class="ruby-operator">::</span><span class="ruby-constant">Error</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">exception</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">count</span> <span class="ruby-operator"><</span> <span class="ruby-identifier">max_retries</span> <span class="ruby-operator">&&</span> <span class="ruby-constant">IDEMPOTENT_METHODS_</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">req</span>.<span class="ruby-identifier">method</span>)
<span class="ruby-identifier">count</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
<span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">close</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@socket</span>
<span class="ruby-constant">D</span> <span class="ruby-node">"Conn close because of error #{exception}, and retry"</span>
<span class="ruby-keyword">retry</span>
<span class="ruby-keyword">end</span>
<span class="ruby-constant">D</span> <span class="ruby-node">"Conn close because of error #{exception}"</span>
<span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">close</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@socket</span>
<span class="ruby-identifier">raise</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">end_transport</span> <span class="ruby-identifier">req</span>, <span class="ruby-identifier">res</span>
<span class="ruby-identifier">res</span>
<span class="ruby-keyword">rescue</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">exception</span>
<span class="ruby-constant">D</span> <span class="ruby-node">"Conn close because of error #{exception}"</span>
<span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">close</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@socket</span>
<span class="ruby-identifier">raise</span> <span class="ruby-identifier">exception</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>