Ruby 1.8.7 リファレンスマニュアル > ライブラリ一覧 > net/httpライブラリ
汎用データ転送プロトコル HTTP を扱うライブラリです。 実装は [RFC2616] に基きます。
例1: GET して 表示するだけ
require 'net/http' Net::HTTP.get_print 'www.example.com', '/index.html'
例2: URI を使う
require 'net/http'
require 'uri'
Net::HTTP.get_print URI.parse('http://www.example.com/index.html')
例3: より汎用的な例
require 'net/http'
require 'uri'
url = URI.parse('http://www.example.com/index.html')
res = Net::HTTP.start(url.host, url.port) {|http|
http.get('/index.html')
}
puts res.body
例4: 上の例よりさらに汎用的な例
require 'net/http'
url = URI.parse('http://www.example.com/index.html')
req = Net::HTTP::Get.new(url.path)
res = Net::HTTP.start(url.host, url.port) {|http|
http.request(req)
}
puts res.body
require 'net/http'
require 'uri'
#例1: POSTするだけ
res = Net::HTTP.post_form(URI.parse('http://www.example.com/search'),
{'q'=>'ruby', 'max'=>'50'})
puts res.body
#例2: 認証付きで POST する
res = Net::HTTP.post_form(URI.parse('http://jack:pass@www.example.com/todo.cgi'),
{'from'=>'2005-01-01', 'to'=>'2005-03-31'})
puts res.body
#例3: より細かく制御する
url = URI.parse('http://www.example.com/todo.cgi')
req = Net::HTTP::Post.new(url.path)
req.basic_auth 'jack', 'pass'
req.set_form_data({'from'=>'2005-01-01', 'to'=>'2005-03-31'}, ';')
res = Net::HTTP.new(url.host, url.port).start {|http| http.request(req) }
case res
when Net::HTTPSuccess, Net::HTTPRedirection
# OK
else
res.value
end
Net::HTTP.Proxy はプロクシ経由での接続を行なうクラスを 生成して返します。このクラスは Net::HTTP と同じ メソッドを持ち、同じように動作をします。ただし 接続する際には常にプロクシ経由となります。
require 'net/http'
proxy_addr = 'your.proxy.host'
proxy_port = 8080
:
Net::HTTP::Proxy(proxy_addr, proxy_port).start('www.example.com') {|http|
# always connect to your.proxy.addr:8080
:
}
また Net::HTTP.Proxy は第一引数が nil だと Net::HTTP 自身を返すので 上のコードのように書いておけばプロクシなしの場合にも対応できます。
Net::HTTP.Proxy にはユーザ名とパスワードを取る オプション引数があり、以下のようにして プロクシの認証をすることができます。
proxy_host = 'your.proxy.host'
proxy_port = 8080
uri = URI.parse(ENV['http_proxy'])
proxy_user, proxy_pass = uri.userinfo.split(/:/) if uri.userinfo
Net::HTTP::Proxy(proxy_host, proxy_port,
proxy_user, proxy_pass).start('www.example.com') {|http|
# always connect to your.proxy.addr:8080 using specified username and password
:
}
このライブラリは環境変数 HTTP_PROXY を一切考慮しないこと に注意してください。プロクシを使いたい場合は上の例のように 明示的に取り扱わなければなりません。
以下の例の fetch はリダイレクトに対応しています。 limit 回数以上リダイレクトしたらエラーにします。
require 'net/http'
require 'uri'
def fetch(uri_str, limit = 10)
# You should choose better exception.
raise ArgumentError, 'HTTP redirect too deep' if limit == 0
response = Net::HTTP.get_response(URI.parse(uri_str))
case response
when Net::HTTPSuccess
response
when Net::HTTPRedirection
fetch(response['location'], limit - 1)
else
response.value
end
end
print fetch('http://www.example.org')
より詳しくは Net::HTTPResponse、 Net::HTTPSuccess、 Net::HTTPRedirection を参照してください。
require 'net/http'
Net::HTTP.start('www.example.com') {|http|
req = Net::HTTP::Get.new('/secret-page.html')
req.basic_auth 'account', 'password'
response = http.request(req)
print response.body
}
POSTで application/x-www-form-urlencoded として複数のフォームの値を送る場合、 現在広く行なわれているのは、 name0=value0&name1=value1 のようにアンパサンド (`&') で区切るやりかたです。 この方法は、[RFC1866] Hypertext Markup Language - 2.0 で初めて公式に登場し、 HTML 4.01 Specification の 17.13.4 Form content types でもそのように書かれています。
ところが、同じ HTML 4.01 Specification の B.2.2 Ampersands in URI attribute values では、 この `&' がSGMLの文字実体参照で用いられることが指摘されており、 CGIやサーバの実装者に対し `&' の代わりに セミコロン `;' をサポートすることを奨めています。
しかし、実際には `;' を解釈しないCGIやサーバもまだまだ見受けられるため このリファレンスマニュアルでは例として `&' を用いました。
なお Ruby 標準の cgi ライブラリでは '&' と ';' の両方サポートしていますので、 cgi ライブラリを使って CGI スクリプトを書く場合はこれらの違いを気にする 必要はありません。
net/http 1.1 の挙動を使いたい場合にはNet::HTTP.version_1_1 を呼ん でください。その後 Net::HTTP.version_1_2 を呼ぶと挙動が 1.2 に戻 ります。
# example
Net::HTTP.start {|http1| ...(http1 has 1.2 features)... }
Net::HTTP.version_1_1
Net::HTTP.start {|http2| ...(http2 has 1.1 features)... }
Net::HTTP.version_1_2
Net::HTTP.start {|http3| ...(http3 has 1.2 features)... }
ただし、この機能はスレッドセーフではありません。 つまり、複数スレッドでそれぞれに version_1_1 や version_1_2 を呼んだ場合、 次に生成する Net::HTTP オブジェクトがどちらのバージョンになるかは保証できません。 アプリケーション全体でどちらかのバージョンに固定する必要があります。
通常この機能は使わないはずです。1.2固定で利用してください。
| HTTPSession | Alias of Net::HTTP |
| Net::HTTP | HTTP のクライアントのためのクラスです。 |
| Net::HTTPGenericRequest | Net::HTTPRequest のスーパークラスです。 このクラスは直接は使わないでください。 |
| Net::HTTPRequest | HTTP リクエストを抽象化するクラスです。 |
| Net::HTTP::Copy | HTTP の COPY リクエストを表すクラスです。 |
| Net::HTTP::Delete | HTTP の DELETE リクエストを表すクラスです。 |
| Net::HTTP::Get | HTTP の GET リクエストを表すクラスです。 |
| Net::HTTP::Head | HTTP の HEAD リクエストを表すクラスです。 |
| Net::HTTP::Lock | HTTP の LOCK リクエストを表すクラスです。 |
| Net::HTTP::Mkcol | HTTP の MKCOL リクエストを表すクラスです。 |
| Net::HTTP::Move | HTTP の MOVE リクエストを表すクラスです。 |
| Net::HTTP::Options | HTTP の OPTIONS リクエストを表すクラスです。 |
| Net::HTTP::Post | HTTP の POST リクエストを表すクラスです。 |
| Net::HTTP::Propfind | HTTP の PROPFIND リクエストを表すクラスです。 |
| Net::HTTP::Proppatch | HTTP の PROPPATCH リクエストを表すクラスです。 |
| Net::HTTP::Put | HTTP の PUT リクエストを表すクラスです。 |
| Net::HTTP::Trace | HTTP の TRACE リクエストを表すクラスです。 |
| Net::HTTP::Unlock | HTTP の UNLOCK リクエストを表すクラスです。 |
| Net::HTTPResponse | HTTP レスポンスを表現するクラスです。 Net::HTTP クラスは実際には HTTPResponse のサブクラスを返します。 |
| Net::HTTPClientError | HTTP レスポンス 4xx (Client Error) を表現するクラスです。 |
| Net::HTTPBadRequest | HTTP レスポンス 400 (Bad Request) を表現するクラスです。 |
| Net::HTTPConflict | HTTP レスポンス 409 (Conflict) を表現するクラスです。 |
| Net::HTTPExpectationFailed | HTTP レスポンス 417 (Expectation Failed) を表現するクラスです。 |
| Net::HTTPForbidden | HTTP レスポンス 403 (Forbidden) を表現するクラスです。 |
| Net::HTTPGone | HTTP レスポンス 410 (Gone) を表現するクラスです。 |
| Net::HTTPLengthRequired | HTTP レスポンス 411 (Length Required) を表現するクラスです。 |
| Net::HTTPMethodNotAllowed | HTTP レスポンス 405 (Method Not Allowed) を表現するクラスです。 |
| Net::HTTPNotAcceptable | HTTP レスポンス 406 (Not Acceptable) を表現するクラスです。 |
| Net::HTTPNotFound | HTTP レスポンス 404 (Not Found) を表現するクラスです。 |
| Net::HTTPPaymentRequired | HTTP レスポンス 402 (Payment Required) を表現するクラスです。 |
| Net::HTTPPreconditionFailed | HTTP レスポンス 412 (Precondition Failed) を表現するクラスです。 |
| Net::HTTPProxyAuthenticationRequired | HTTP レスポンス 407 (Proxy Authentication Required) を表現するクラスです。 |
| Net::HTTPRequestEntityTooLarge | HTTP レスポンス 413 (Request Entity Too Large) を表現するクラスです。 |
| Net::HTTPRequestTimeOut | HTTP レスポンス 408 (Request Time-out) を表現するクラスです。 |
| Net::HTTPRequestURITooLarge | Alias of Net::HTTPRequestURITooLong |
| Net::HTTPRequestURITooLong | HTTP レスポンス 414 (Request-URI Too Large) を表現するクラスです。 |
| Net::HTTPRequestedRangeNotSatisfiable | HTTP レスポンス 416 (Requested range not satisfiable) を表現するクラスです。 |
| Net::HTTPUnauthorized | HTTP レスポンス 401 (Unauthorized) を表現するクラスです。 |
| Net::HTTPUnsupportedMediaType | HTTP レスポンス 415 (Unsupported Media Type) を表現するクラスです。 |
| Net::HTTPInformation | HTTP レスポンス 1xx (Informational) を表現するクラスです。 |
| Net::HTTPContinue | HTTP レスポンス 100 (Continue) を表現するクラスです。 |
| Net::HTTPSwitchProtocol | HTTP レスポンス 101 (Switching Protocols) を表現するクラスです。 |
| Net::HTTPRedirection | HTTP レスポンス 3xx (Redirection) を表現するクラスです。 |
| Net::HTTPFound | HTTP レスポンス 302 (Found) を表現するクラスです。 詳しくは [RFC2616] を見てください。 |
| Net::HTTPMovedPermanently | HTTP レスポンス 301 (Moved Permanently) を表現するクラスです。 |
| Net::HTTPMovedTemporarily | Alias of Net::HTTPFound |
| Net::HTTPMultipleChoice | HTTP レスポンス 300 (Multiple Choices) を表現するクラスです。 |
| Net::HTTPNotModified | HTTP レスポンス 304 (Not Modified) を表現するクラスです。 |
| Net::HTTPSeeOther | HTTP レスポンス 303 (See Other) を表現するクラスです。 |
| Net::HTTPTemporaryRedirect | HTTP レスポンス 307 (Temporary Redirect) を表現するクラスです。 |
| Net::HTTPUseProxy | HTTP レスポンス 305 (Use Proxy) を表現するクラスです。 |
| Net::HTTPServerError | HTTP レスポンス 5xx (Server Error) を表現するクラスです。 |
| Net::HTTPBadGateway | HTTP レスポンス 502 (Bad Gateway) を表現するクラスです。 |
| Net::HTTPGatewayTimeOut | HTTP レスポンス 504 (Gateway Time-out) を表現するクラスです。 |
| Net::HTTPInternalServerError | HTTP レスポンス 500 (Internal Server Error) を表現するクラスです。 |
| Net::HTTPNotImplemented | HTTP レスポンス 501 (Not Implemented) を表現するクラスです。 |
| Net::HTTPServiceUnavailable | HTTP レスポンス 503 (Service Unavailable) を表現するクラスです。 |
| Net::HTTPVersionNotSupported | HTTP レスポンス 505 (HTTP Version not supported) を表現するクラスです。 |
| Net::HTTPSuccess | HTTP レスポンス 2xx (Success) を表現するクラスです。 |
| Net::HTTPAccepted | HTTP レスポンス 202 (Accepted) を表現するクラスです。 |
| Net::HTTPCreated | HTTP レスポンス 201 (Created) を表現するクラスです。 |
| Net::HTTPNoContent | HTTP レスポンス 204 (No Content) を表現するクラスです。 |
| Net::HTTPNonAuthoritativeInformation | HTTP レスポンス 203 (Non-Authoritative Information) を表現するクラスです。 |
| Net::HTTPOK | HTTP レスポンス 200 (OK) を表現するクラスです。 |
| Net::HTTPPartialContent | HTTP レスポンス 206 (Partial Content) を表現するクラスです。 |
| Net::HTTPResetContent | HTTP レスポンス 205 (Reset Content) を表現するクラスです。 |
| Net::HTTPUnknownResponse | このライブラリが知らないレスポンスを表現するクラスです。 |
| Net::HTTPExceptions | HTTP 例外クラスです。 |
| Net::HTTPHeader | HTTP ヘッダのためのモジュールです。 |
| Net::HTTPBadResponse | HTTP のレスポンスが不正であった場合に発生する例外です。 |
| Net::HTTPHeaderSyntaxError | HTTP ヘッダの内容が不正である場合に発生する例外です。 |
| Net::HTTPError | HTTP ステータスコード 1xx を受け取ったという例外です。 または、ステータスコードが未知のものである場合も これに対応します。 |
| Net::HTTPFatalError | HTTP ステータスコード 5xx を受け取ったという例外です。 |
| Net::HTTPRetriableError | HTTP ステータスコード 3xx を受け取ったという例外です。 |
| Net::HTTPServerException | HTTP ステータスコード 4xx を受け取ったという例外です。 |