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

时间:2019-06-18 21:53:10

标签: perl http http-proxy

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

我可以通过卷曲来做到这一点,但不能使用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://stackoverflow.com');

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

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

因此,上面的代码生成一个'200',但是我在鱿鱼访问日志中没有看到任何条目。当我尝试卷曲动作

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

我知道

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

访问日志中的

很明显,我缺少一些步骤,但是我已经从perl文档中复制了示例,但无法使它正常工作。

1 个答案:

答案 0 :(得分:2)

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

鉴于您访问了https:// URL,则需要为协议https(而不是像以前那样http)设置代理。

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

仅当您通过环境(即$ua->env_proxy)显式启用代理设置时,才使用此设置。此外,这里的设置也应该是HTTPS_PROXY而不是HTTP_PROXY