Spec-Zone.ru › Ruby 4.0
  1. Сеть::
  2. HTTPResponse

класс Net::HTTPResponse

Родительский класс:
Object

Этот класс является базовым классом для классов ответов Net::HTTP.

Об этих примерах

В приведённых здесь примерах предполагается, что был подключён net/http (который также подключает uri):

require 'net/http'

Во многих примерах кода используются следующие сайты:

  • jsonplaceholder.typicode.com.

  • example.com.

В некоторых примерах также предполагается наличие следующих переменных:

uri = URI('https://jsonplaceholder.typicode.com/')
uri.freeze # Examples may not modify.
hostname = uri.hostname # => "jsonplaceholder.typicode.com"
path = uri.path         # => "/"
port = uri.port         # => 443

Это позволяет записывать примеры запросов так:

Net::HTTP.get(uri)
Net::HTTP.get(hostname, '/index.html')
Net::HTTP.start(hostname) do |http|
  http.get('/todos/1')
  http.get('/todos/2')
end

В примере, где сначала требуется изменить URI, создаётся копия uri, а затем изменяется эта копия:

_uri = uri.dup
_uri.path = '/todos/1'

Возвращаемые ответы

Метод Net::HTTP.get_response возвращает экземпляр одного из подклассов Net::HTTPResponse:

Net::HTTP.get_response(uri)
# => #<Net::HTTPOK 200 OK readbody=true>
Net::HTTP.get_response(hostname, '/nosuch')
# => #<Net::HTTPNotFound 404 Not Found readbody=true>

То же относится и к методу Net::HTTP#request:

req = Net::HTTP::Get.new(uri)
Net::HTTP.start(hostname) do |http|
  http.request(req)
end # => #<Net::HTTPOK 200 OK readbody=true>

Класс Net::HTTPResponse включает модуль Net::HTTPHeader, предоставляющий доступ к значениям заголовков ответа с помощью, в частности:

  • Метода [], работающего как хеш.

  • Специальных методов чтения, например content_type.

Примеры:

res = Net::HTTP.get_response(uri) # => #<Net::HTTPOK 200 OK readbody=true>
res['Content-Type']               # => "text/html; charset=UTF-8"
res.content_type                  # => "text/html"

Подклассы ответов

Для каждого кода состояния HTTP у класса Net::HTTPResponse есть подкласс. Класс ответа для заданного кода можно найти так:

Net::HTTPResponse::CODE_TO_OBJ['200'] # => Net::HTTPOK
Net::HTTPResponse::CODE_TO_OBJ['400'] # => Net::HTTPBadRequest
Net::HTTPResponse::CODE_TO_OBJ['404'] # => Net::HTTPNotFound

Код состояния также можно получить из объекта ответа:

Net::HTTP.get_response(uri).code                 # => "200"
Net::HTTP.get_response(hostname, '/nosuch').code # => "404"

Подклассы ответов (отступы показывают иерархию классов):

  • Net::HTTPUnknownResponse (для необработанных расширений HTTP).

  • Net::HTTPInformation:

    • Net::HTTPContinue (100)

    • Net::HTTPSwitchProtocol (101)

    • Net::HTTPProcessing (102)

    • Net::HTTPEarlyHints (103)

  • Net::HTTPSuccess:

    • Net::HTTPOK (200)

    • Net::HTTPCreated (201)

    • Net::HTTPAccepted (202)

    • Net::HTTPNonAuthoritativeInformation (203)

    • Net::HTTPNoContent (204)

    • Net::HTTPResetContent (205)

    • Net::HTTPPartialContent (206)

    • Net::HTTPMultiStatus (207)

    • Net::HTTPAlreadyReported (208)

    • Net::HTTPIMUsed (226)

  • Net::HTTPRedirection:

    • Net::HTTPMultipleChoices (300)

    • Net::HTTPMovedPermanently (301)

    • Net::HTTPFound (302)

    • Net::HTTPSeeOther (303)

    • Net::HTTPNotModified (304)

    • Net::HTTPUseProxy (305)

    • Net::HTTPTemporaryRedirect (307)

    • Net::HTTPPermanentRedirect (308)

  • Net::HTTPClientError:

    • Net::HTTPBadRequest (400)

    • Net::HTTPUnauthorized (401)

    • Net::HTTPPaymentRequired (402)

    • Net::HTTPForbidden (403)

    • Net::HTTPNotFound (404)

    • Net::HTTPMethodNotAllowed (405)

    • Net::HTTPNotAcceptable (406)

    • Net::HTTPProxyAuthenticationRequired (407)

    • Net::HTTPRequestTimeOut (408)

    • Net::HTTPConflict (409)

    • Net::HTTPGone (410)

    • Net::HTTPLengthRequired (411)

    • Net::HTTPPreconditionFailed (412)

    • Net::HTTPRequestEntityTooLarge (413)

    • Net::HTTPRequestURITooLong (414)

    • Net::HTTPUnsupportedMediaType (415)

    • Net::HTTPRequestedRangeNotSatisfiable (416)

    • Net::HTTPExpectationFailed (417)

    • Net::HTTPMisdirectedRequest (421)

    • Net::HTTPUnprocessableEntity (422)

    • Net::HTTPLocked (423)

    • Net::HTTPFailedDependency (424)

    • Net::HTTPUpgradeRequired (426)

    • Net::HTTPPreconditionRequired (428)

    • Net::HTTPTooManyRequests (429)

    • Net::HTTPRequestHeaderFieldsTooLarge (431)

    • Net::HTTPUnavailableForLegalReasons (451)

  • Net::HTTPServerError:

    • Net::HTTPInternalServerError (500)

    • Net::HTTPNotImplemented (501)

    • Net::HTTPBadGateway (502)

    • Net::HTTPServiceUnavailable (503)

    • Net::HTTPGatewayTimeOut (504)

    • Net::HTTPVersionNotSupported (505)

    • Net::HTTPVariantAlsoNegotiates (506)

    • Net::HTTPInsufficientStorage (507)

    • Net::HTTPLoopDetected (508)

    • Net::HTTPNotExtended (510)

    • Net::HTTPNetworkAuthenticationRequired (511)

Открытые методы класса

body_permitted? () Показать исходный код
# File lib/net/http/response.rb, line 138
def body_permitted?
  self::HAS_BODY
end

true, если ответ содержит тело.

Ruby Core © 1993–2025 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API