2013-03-21 12 views
6

私は、TORを介してWebサイトにアクセスする際にperlを使用するのが難しいです。これは、httpsサイトであれば難しいですが、httpサイトである場合はそうではありません。PerlがTORを使用し、httpsを使用しないhttpウェブサイトを許可するのはなぜですか?

#!/usr/bin/perl 
use strict; 

use WWW::Mechanize; 
use LWP::Protocol::socks; 
use LWP::Protocol::https; 
use utf8; 

my $mech = WWW::Mechanize->new(timeout => 60*5); 
$mech->proxy(['http', 'https'], 'socks://localhost:9150'); 
$mech->get("https://www.google.com"); 

私は、エラーメッセージ受信しています。エラーGETing https://www.google.com:ステータスの読み取りに失敗しました:。10行で不正なファイルディスクリプタ、」ラインI10は、プログラムの最後の行である

をTORブラウザでは、私は正常に表示することができます。「https://www.google.com」私はActivePerlの5.16.2を使用しています9150. のポートと、Vadalia 0.2.21とのTor 0.2.3.25 私はWindowsマシンを持っているし、私の主なインターネットブラウザがMozillaの

私はコマンドを使ってパッケージをインストールしようとしました:

cpan LWP::UserAgent 
ppm install LWP::Protocol::https 
cpan LWP::Protocol::https 
ppm install LWP::Protocol::socks 
cpan LWP::Protocol::socks 
ppm install Mozilla::CA 
ppm install IO::Socket::SSL 
ppm install Crypt::SSLeay 
cpan Crypt::SSLeay 

ありがとうございます!私が提供できる追加情報があるかどうか私にお知らせください。

+0

あなたは靴下の代わりにhttpを使ってみましたか? 'socks:// localhost:9150'ではなく 'ht tp:// localhost:9150'? – ugexe

+0

はい、最終的な結果(およびエラー)も変わりませんでした。 – paso

+0

これを使用してエラーを表示していますか? [リンク](http://search.cpan.org/dist/WWW-Mechanize/lib/WWW/Mechanize/FAQ.pod#I_tried_to_ [such-and-such] _and_I_got_this_weird_error) - 奇妙なエラーの下で。プロキシのログはあなたに何を伝えますか? –

答えて

1

あなたが使用しているプロキシは、すでにHTTPSプロキシ(つまり、CONNECTプロキシ)です。その場合、これはうまくいくはずです:

#!/usr/bin/perl 
use strict; 

use WWW::Mechanize; 
use LWP::Protocol::socks; 
use LWP::Protocol::https; 
use utf8; 

my $mech = WWW::Mechanize->new(timeout => 60*5); 
$mech->proxy(['http'], 'socks://localhost:9150'); 
$mech->proxy(['https'], 'https://localhost:9150'); ### <-- make https go over https-connect proxy 

$mech->get("https://www.google.com"); 
1

私は起源を見つけることができませんが、私は長い時間前にそれと戦った。基本的に私が持っていた問題は、LWP :: UserAgentがhttps要求に使用されたということでした。

おそらくこの質問はあなたを助けることができる:How do I force LWP to use Crypt::SSLeay for HTTPS requests?

2

時間前、私はLWPを使用しているため、サイトのこれらの種類を取得するためにWWW ::カール::容易を使用してのTorとthrought HTTPSサイトを移動するための方法を見つけました私は同じ問題を発見した。 その後、すべてのHTMLファイルを保存し、WWW :: MechanzieまたはHTML :: TreeBuilderを使用してそれらを解析します。

投稿フォームなどのようなサイトとのインタラクティブ性がさらに必要な場合は、カールと対話する必要があるため、このソリューションはもっと面倒かもしれません。

package Curl; use warnings; use WWW::Curl::Easy; use WWW::UserAgent::Random; my $curl = WWW::Curl::Easy->new; my $useragent = rand_ua("browsers"); my $host = 'localhost'; my $port = '9070'; my $timeout = '20'; my $connectTimeOut= '20'; &init; sub get { my $url = shift; $curl->setopt(CURLOPT_URL, $url); my $response_body; $curl->setopt(CURLOPT_WRITEDATA,\$response_body); my $retcode = $curl->perform; if ($retcode == 0) { print("Transfer went ok Http::Code = ".$curl->strerror($retcode)."\n"); my $response_code = $curl->getinfo(CURLINFO_HTTP_CODE); # judge result and next action based on $response_code return \$response_body; } else { # Error code, type of error, error message print("An error happened: $retcode ".$curl->strerror($retcode)." ".$curl->errbuf."\n"); return 0; } } sub init { #setejem el proxy $curl->setopt(CURLOPT_PROXY,"$host:".$port); $curl->setopt(CURLOPT_PROXYTYPE,CURLPROXY_SOCKS4); #posem les altres dades $curl->setopt(CURLOPT_USERAGENT, $useragent); $curl->setopt(CURLOPT_CONNECTTIMEOUT, $connectTimeOut); $curl->setopt(CURLOPT_TIMEOUT, $timeout); $curl->setopt(CURLOPT_SSL_VERIFYPEER,0); $curl->setopt(CURLOPT_HEADER,0); }

これはあなたを助けることを願っています!

関連する問題