我正在尝试编写一个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文档中复制了示例,但无法使它正常工作。
答案 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
。