簡體   English   中英

來自Perl的HTTP(S)請求僅通過IO :: Socket進行代理

[英]HTTP(S) request from Perl over proxy with IO::Socket only

我有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代理

我自己找到了解決方案。 我使用模塊IO :: Socket :: Socks :: Wrapper將所有請求重定向到SOCKS5代理。 我只在腳本的開頭添加了

use IO::Socket::Socks::Wrapper (
{
    ProxyAddr => 'proxy.addr',
    ProxyPort => 8876,
}
);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM