2013-03-21 11 views
6

Ho difficoltà a usare perl per visitare un sito web tramite TOR se si tratta di un sito https ma non se si tratta di un sito http.Perché Perl potrebbe consentire i siti Web http utilizzando TOR ma non 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"); 

sto ricevendo il messaggio di errore: Errore Ottenendo https://www.google.com: leggere lo stato fallito:. Descrittore di file inappropriato alla riga 10," dove la linea i10 è l'ultima riga del programma

Nel browser TOR, posso vedere con successo: "https://www.google.com" con un porto di 9150. sto usando ActivePerl 5.16.2; Vadalia 0.2.21 e Tor 0.2.3.25 ho una macchina Windows e il browser Internet Mozilla primario è

..

Ho provato a installare pacchetti con i comandi:

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 

Grazie per qualsiasi aiuto! Per favore fatemi sapere se ci sono ulteriori informazioni che posso fornire.

+0

hai provato a utilizzare http invece di calze? vale a dire 'ht tp: // localhost: 9150' invece di 'socks: // localhost: 9150'? – ugexe

+0

Sì, e il risultato finale (e l'errore) non era diverso. – paso

+0

Lo stai usando per vedere l'errore? [link] (http://search.cpan.org/dist/WWW-Mechanize/lib/WWW/Mechanize/FAQ.pod#I_tried_to_ [tal-and-such] _and_I_got_this_weird_error) - in caso di errore strano. Cosa ti dicono i registri del proxy? –

risposta

1

Forse il proxy che si sta utilizzando è già un proxy HTTPS (ad esempio il proxy CONNECT). In questo caso dovrebbe funzionare (non testata):

#!/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

Tempo fa, avevo trovato il modo di andare throught https siti con Tor usando WWW :: :: Curl Facile a prendere questo tipo di siti, perché l'utilizzo LWP ho trovato gli stessi problemi Dopodiché salvo tutti i file html nei file e li analizzo usando WWW :: Mechanzie o HTML :: TreeBuilder.

Se si desidera maggiore interattività con i moduli di post del sito, ecc. Queste soluzioni possono essere più noiose perché è necessario interagire con il ricciolo.

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

Spero che questo vi aiuterà!

Problemi correlati