Perl LWP пытается установить для peer_http_version значение HTTP/1.0

Получение ошибки сервера 500 при попытке подключения к серверу Microsoft-HTTPAPI/2.0 с использованием perl LWP. Может успешно подключиться с помощью браузера. Единственная разница, которую я вижу, заключается в том, что браузер использует протокол HTTP/1.0 по сравнению с LWP HTTP/1.1. Поэтому я безуспешно пытался заставить LWP использовать старый протокол. Я нашел примеры настройки этого протокола, но проверка пакетов с помощью Wireshark по-прежнему показывает HTTP/1.1. Что я пропустил здесь. Использование Active Perl v5.16.1.

#! C:\Perl64\bin\perl.exe
use strict;
use warnings;
use LWP::UserAgent;
use HTTP::Request;
use HTTP::Request::Common;
my $ua = new LWP::UserAgent(keep_alive=>1);
# trying to force HTTP/1.0
push(@LWP::Protocol::http::EXTRA_SOCK_OPTS, PeerHTTPVersion => "1.0");
my $response = $ua->request(GET "http://google.com");

person john nowlin    schedule 11.10.2012    source источник
comment
Какой браузер вы используете, который выдает запросы HTTP/1.0?!   -  person friedo    schedule 11.10.2012
comment
Невозможно, чтобы Firefox отправлял запросы HTTP/1.0, если вы вручную не обновили конфигурацию network.http.version, и я не могу придумать никаких причин для этого. Как вы проверяете эти HTTP-запросы?   -  person friedo    schedule 11.10.2012
comment
@friedo из Wireshark ‹pre›GET / HTTP/1.0 Host: www.google.com User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20100101 Firefox/15.0.1‹/pre›   -  person john nowlin    schedule 11.10.2012
comment
Это особенно не имеет смысла. HTTP 1.0 не имеет заголовка Host.   -  person friedo    schedule 11.10.2012
comment
Не имеет смысла. Моя версия network.http.version — 1.1.   -  person john nowlin    schedule 11.10.2012


Ответы (1)


Это заставит LWP указать HTTP/1.0.

my $request = GET "http://google.com";
$request->protocol('HTTP/1.0');
my $response = $ua->request($request);
person ikegami    schedule 11.10.2012