1

我有 Perl 脚本,我在其中对 HTTPS 服务器执行 PUT 请求并发送文件。该请求仅通过 IO::Socket::SSL 完成。

$socket = new IO::Socket::INET(PeerAddr => $host,PeerPort => $port,Proto    => 'tcp');
my $h ="PUT ".$path." HTTP/1.0\r\n";
    $h.="Accept: */*\r\n";
    ........
    $h.="\r\n";

print $socket $h;

但现在我需要通过代理服务器执行此请求

最简单的方法是如何做到这一点?我可以配置 prozy 服务器来设置不同类型的连接(如果有不同的类型)。什么是最好的类型?

如何进行请求?据我了解,我必须使用 IO::Socket 连接到代理并放置类似 CONNECT 的内容。

这看起来怎么样?

谢谢

更新 1. 我找到了这样的解决方案http://search.cpan.org/~oleg/IO-Socket-Socks-0.62/lib/IO/Socket/Socks.pm 模块 IO::Socket::Socks 做了什么我需要。但不适用于 HTTPS。我尝试使用 IO::Socket::SecureSocks。但它总是失败

#!/usr/bin/perl

use IO::Socket::SecureSocks;


my $socket = IO::Socket::SecureSocks->new(
              ProxyAddr   => '127.0.0.1',
              ProxyPort   => 8876,  
              ConnectAddr => 'yahoo.com',
              ConnectPort => 443,
              Timeout     => 10
              ) or die "Error $!\n";

print $socket "GET / HTTP 1.1\r\n\r\n";
print join ('',<$socket>);

它显示错误。我做错了什么?

此代理适用于 PHP 和 https 链接中的 curl。代理是 SOCKS 5 代理

4

1 回答 1

4

我自己找到了解决方案。我使用模块 IO::Socket::Socks::Wrapper 将所有请求重定向到 SOCKS5 代理。我只在脚本的开头添加了

use IO::Socket::Socks::Wrapper (
{
    ProxyAddr => 'proxy.addr',
    ProxyPort => 8876,
}
);
于 2013-09-04T13:06:18.390 回答