2013-03-21 23 views
6

Mam trudności z korzystaniem z perla do odwiedzenia strony internetowej za pośrednictwem TOR, jeśli jest to strona https, ale nie, jeśli jest to strona http.Dlaczego Perl może zezwalać na strony http używające TOR, ale nie https?

#!/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"); 

otrzymuję komunikat o błędzie: Błąd czuło https://www.google.com: Odczyt stanu nie powiodła się:. Bad deskryptor pliku w wierszu 10,”gdzie linia i10 jest ostatnia linia programu

W przeglądarce TOR, mogę z powodzeniem zobaczyć: "https://www.google.com" z portu 9150. Używam ActivePerl 5.16.2; Vadalia 0.2.21 i Tor 0.2.3.25 mam komputer z Windows, a moim głównym jest przeglądarka internetowa Mozilla

..

Próbowałem zainstalować pakiety za pomocą poleceń:

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 

Dziękuję za pomoc! Proszę dać mi znać, czy są jakieś dodatkowe informacje, które mogę podać.

+0

Czy próbowałeś używać http zamiast skarpet? tj .: "ht tp: // localhost: 9150" zamiast "skarpet: // localhost: 9150"? – ugexe

+0

Tak, a ostateczny wynik (i błąd) nie był inny. – paso

+0

Czy używasz tego, aby zobaczyć błąd? [link] (http://search.cpan.org/dist/WWW-Mechanize/lib/WWW/Mechanize/FAQ.pod#I_tried_to_ [takie-i-takie] _i_I_got_this_weird_error) - pod dziwnym błędem. Co mówią dzienniki proxy? –

Odpowiedz

1

Być może używane proxy jest już proxy HTTPS (tj. Proxy CONNECT). W takim przypadku powinno to działać (untested):

#!/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"); 
2

czas temu że znalazł drogę do przebycia throught HTTPS z Torem używając WWW :: Curl :: Łatwy do pobierania tych rodzaju witryn, ponieważ za pomocą LWP znalazłem te same problemy. Później zapisuję wszystkie pliki HTML i parsuję je za pomocą WWW :: Mechanzie lub HTML :: TreeBuilder.

Jeśli chcesz mieć więcej interaktywności z takimi formularzami, jak post, itp. Rozwiązania te mogą być bardziej uciążliwe, ponieważ musisz wchodzić w interakcje z lokami.

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); }

nadzieję, że to pomoże!