Извращенная HTTP-версия веб-клиента

Если я отправляю HTTP-запрос с использованием twisted.web.client.Agent, как заставить запрос использовать HTTP 1.0? По умолчанию используется HTTP 1.1.

Изменить: причина, по которой я заинтересован в использовании HTTP 1.0, заключается в том, что я хочу отключить кодирование фрагментированной передачи, и самый надежный способ сделать это — использовать HTTP 1.0.


person veered    schedule 07.12.2014    source источник
comment
Почему минус? Я довольно тщательно просмотрел документы, Интернет и исходный код, но не смог найти ответа.   -  person veered    schedule 08.12.2014
comment
HTTP 1.1 был выпущен в 1999 году. В то время Netscape Navigator 4.0 был текущим веб-браузером. Вам действительно нужна поддержка Netscape Navigator 3.0?   -  person Glyph    schedule 08.12.2014
comment
@Glyph Нет, я хочу отключить кодирование фрагментированной передачи, и самый надежный способ сделать это — использовать HTTP 1.0. И не похоже, что ничего больше не использует HTTP 1.0, см. этот пост например.   -  person veered    schedule 08.12.2014
comment
Но учтите, я изменю исходный вопрос, включив в него это обоснование.   -  person veered    schedule 08.12.2014


Ответы (1)


Если вы хотите использовать twisted.web.client.Agent, вам не обойтись без обезьяньих патчей или чего-то подобного. Отслеживание через источник, один из то, что вы найдете, это:

# In the future, having the protocol version be a parameter to this
# method would probably be good.  It would be nice if this method
# weren't limited to issueing HTTP/1.1 requests.
requestLines = []
requestLines.append(
    '%s %s HTTP/1.1\r\n' % (self.method, self.uri))

Так что это жестко запрограммировано. Возможно, вы сможете обойти это с помощью некоторых патчей, но это не очень легко.


Но это не значит, что вам не повезло; это относится только к twisted.web.client.Agent. Если вы можете отказаться от использования этого класса, похоже, что какой-то старый код только для HTTP 1.0 все еще существует. В частности, если вы используете эти классы/функции, похоже, вы будете использовать HTTP 1.0:

  • HTTPPageGetter
  • HTTPPageDownloader
  • HTTPClientFactory
  • HTTPDownloader
  • getPage
  • downloadPage

Но если вы отклонитесь от них, я думаю, вы в конечном итоге будете использовать новую реализацию HTTP 1.1 (на данный момент).

person icktoofay    schedule 07.12.2014
comment
Я не думаю, что twisted.web.client.Agent использует HTTPClient. И даже если это так, если вы посмотрите на журналы сервера, то запрос GET от агента даст вам что-то вроде GET index.html HTTP/1.1. Таким образом, он определенно использует HTTP 1.1 по умолчанию. Также по умолчанию для файла twisted.web.http.protocol_version используется значение HTTP/1.1 (в строке 129 источника, на который вы ссылаетесь). - person veered; 08.12.2014
comment
@Veered: Извините, вы, должно быть, смотрите на старую версию моего ответа. Я изучил это подробнее, и действительно, у Twisted есть две отдельные реализации HTTP-клиентов, одна более старая реализация HTTP 1.0 и новая реализация HTTP 1.1. Я думаю, что Agent всегда будет использовать реализацию 1.1, поэтому, если вы хотите 1.0, вам, возможно, придется использовать некоторые из старых функций и классов. (Кроме того, protocol_version = "HTTP/1.1" — отвлекающий маневр, поскольку эта переменная никогда не используется.) - person icktoofay; 08.12.2014
comment
Ого, спасибо за обновление! Поскольку сейчас это для личного использования, я просто остался с агентом и вручную изменил источник, на который вы ссылаетесь, и он отлично работает! - person veered; 08.12.2014