【问题标题】:Perl LWP trying to set peer_http_version to HTTP/1.0Perl LWP 试图将 peer_http_version 设置为 HTTP/1.0
【发布时间】:2012-10-02 07:33:48
【问题描述】:

尝试使用 perl LWP 连接到 Microsoft-HTTPAPI/2.0 服务器时出现 500 服务器错误。可以使用浏览器成功连接。我看到的唯一区别是浏览器问题 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");

【问题讨论】:

  • 您使用什么浏览器发出 HTTP/1.0 请求?!
  • 除非您手动更新了 network.http.version 配置,否则 Firefox 不可能发送 HTTP/1.0 请求 - 我想不出有人这样做的任何理由。您如何检查这些 HTTP 请求?
  • @friedo 来自 Wireshark
    GET / HTTP/1.0 主机:www.google.com 用户代理:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20100101 Firefox/ 15.0.1
  • 这尤其没有意义。 HTTP 1.0 没有 Host 标头。
  • 没有意义。我的 network.http.version 是 1.1。

标签: perl http version lwp peer


【解决方案1】:

这将使 LWP 指定 HTTP/1.0。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-14
    • 2018-12-09
    • 2011-06-25
    • 2012-01-25
    • 1970-01-01
    • 2017-01-22
    相关资源
    最近更新 更多