Perl HTTP 请求跳过代理服务器直接连接目标

Perl HTTP request skips proxy server and connects to target directly

我正在尝试编写一个 perl 脚本以通过 Squid 代理服务器从网址中提取数据。我在 CentOS7 上有 Squid 服务器 运行,侦听端口 3128 并使用 /usr/lib64/squid/basic_ncsa_auth 进行身份验证。但是,我不断得到 perl 似乎完全绕过代理并直接连接到目标。

我可以通过 curl 做到这一点,但不能使用 perl。

我已经用几种方法重写了我的 perl 脚本。我已经更新了 perl 版本(目前是 5.28)。


use LWP::UserAgent;

$ENV{'HTTP_PROXY'} = 'http://localhost:3128/';
$ENV{'HTTP_PROXY_USERNAME'} = 'user1';
$ENV{'HTTP_PROXY_PASSWORD'} = 'password1';

$ua = LWP::UserAgent->new();

$ua->proxy('http', 'http://localhost:3128/');

my $req = HTTP::Request->new('GET', 'https://whosebug.com');

$req->proxy_authorization_basic("user1", "password1");
my $res = $ua->request($req);

print $res->code ."\n";

因此,上面的代码生成了“200”,但是,我在我的 squid 访问日志中看不到任何条目。当我尝试卷曲时

curl --proxy-user user1:password1 -x http://localhost:3128 https://whosebug.com)

我明白了

1560893906.291 513 ::1 TCP_TUNNEL/200 270148 CONNECT whosebug.com:443 user1 HIER_DIRECT/151.101.65.69 -

在访问日志中。

显然,我遗漏了一些步骤,但我已经从 perl 文档中复制了示例,但无法使其正常工作。

$ua->proxy('http', 'http://localhost:3128/');
my $req = HTTP::Request->new('GET', 'https://whosebug.com');

鉴于您访问 https:// URL,您需要为协议设置代理 https,而不是像您所做的那样 http

$ENV{'HTTP_PROXY'} = 'http://localhost:3128/';

此设置仅在您通过环境明确启用代理设置时使用,即 $ua->env_proxy。此外,这里的设置也应该是 HTTPS_PROXY 而不是 HTTP_PROXY