2014-07-11 4 views
5

का उपयोग कर किसी भी HTTPS साइट से कनेक्ट नहीं कर सकता हूं, मैं एक ऐसी स्क्रिप्ट बनाने की कोशिश कर रहा हूं जो बस किसी वेबसाइट से कनेक्ट हो। हालांकि, किसी कारण से यह HTTPS का उपयोग कर रहे किसी भी चीज़ से कनेक्ट नहीं होगा।मैं LWP :: UserAgent

हमारे यहां एक प्रॉक्सी सक्षम है। हालांकि, मेरा मानना ​​है कि प्रॉक्सी समस्या नहीं है, क्योंकि अगर मैं नेटवर्क के अंदर एक HTTPS से कनेक्ट करना चाहता था जो प्रॉक्सी के माध्यम से सुरंग नहीं करता है तो यह अभी भी विफल रहता है।

यदि मैं इस प्रोग्राम को किसी भी साइट पर चलाने के लिए चला रहा था जो HTTPS का उपयोग नहीं कर रहा है, तो मैं प्राप्त कर सकता हूं और स्क्रिप्ट इरादे के अनुसार काम कर सकती है।

मैं क्या सोच रहा हूं कि किसी भी एसएसएल सुरक्षित साइटों से कनेक्ट होने से स्क्रिप्ट को अवरुद्ध करके क्या संभव हो सकता है।

$ENV{HTTPS_DEBUG} = 1; 

my $ua = LWP::UserAgent->new(keep_alive => 1); 
$ua->agent('Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36'); 
my $pac = HTTP::ProxyPAC->new(URI->new("http://pacfilelocation:8080/pac_file.pac")); 
my $res = $pac->find_proxy("https://www.google.com"); 


if ($res->direct) { 
    print "No Proxy Needed\n"; 
} elsif ($res->proxy) { 
    print "Proxy: " . $res->proxy . "\n"; 
    $ENV{HTTPS_PROXY} = $res->proxy; 
    $ENV{HTTP_PROXY} = $res->proxy; 
    $ua->env_proxy; 
} 

my $req = new HTTP::Request('GET', 'https://www.google.com/'); 
$req->header('Accept' => 'text/html'); 
$req->header('Host', 'www.google.com'); 

my $res2 = $ua->request($req); 

if ($res2->is_success) { 
    print $res2->decoded_content; 
} else { 
    print "Error: " . $res2->status_line . "\n"; 
} 

किसी कारण नहीं उत्पादन डिबग है, जो इस सभी को और अधिक कठिन बना देता है हल करने के लिए है के लिए HTTPS_DEBUG सुविधा:

यहाँ कोड है कि मैंने लिखा है।

जब स्क्रिप्ट मैं एक सामान्य त्रुटि मिलती चल:

Error: 500 Can't connect to www.google.com:443 

किसी भी मदद की बहुत अच्छा होगा!

उत्तर

7

कृपया सुनिश्चित करें कि आप LWP :: UserAgent के कम से कम संस्करण 6.06 और LWP :: प्रोटोकॉल :: https के संस्करण 6.06 का उपयोग करते हैं। किसी भी संस्करण से पहले https प्रॉक्सी के लिए उचित समर्थन नहीं है, कम से कम IO :: सॉकेट :: SSL का उपयोग अंतर्निहित SSL लाइब्रेरी के रूप में नहीं करते हैं।

संस्करण प्राप्त करने के लिए आप चल रहे हैं:

use LWP::UserAgent; 
use LWP::Protocol::https; 
print "LWP::UserAgent: ".LWP::UserAgent->VERSION,"\n"; 
print "LWP::Protocol::https: ".LWP::Protocol::https->VERSION,"\n"; 

आप कम से कम आवश्यक संस्करणों के उन्नयन के लिए कुछ भी उपयोग करते हैं। हालांकि यह LWP :: UserAgent के लिए आसान है, cpan डिफ़ॉल्ट रूप से LWP :: प्रोटोकॉल :: https का नवीनतम संस्करण स्थापित नहीं कर सकता है, http://www.nntp.perl.org/group/perl.libwww/2014/05/msg7718.html देखें। इस मामले में आपको इसे http://search.cpan.org/~mschilli/LWP-Protocol-https-6.06/ से स्पष्ट रूप से प्राप्त करना होगा।

यदि आप हाल ही में डेबियन सिस्टम या उबंटू> = 14.04 पर हैं तो आपके पास अभी भी एलडब्ल्यूपी :: प्रोटोकॉल :: https का संस्करण 6.04 होगा, लेकिन इसमें पहले से ही उचित https प्रॉक्सी समर्थन के लिए आवश्यक पैच शामिल हैं।

अन्य विकल्प एलडब्लूपी के लिए पुराने नेट :: एसएसएल/क्रिप्ट :: एसएसएलई बैकएंड का उपयोग करना होगा, लेकिन मैं इसके खिलाफ सलाह देता हूं, क्योंकि यह सभी आवश्यक प्रमाणपत्र जांच लागू नहीं करता है और इस प्रकार एक मैन-इन-द-द-माउंट इसके खिलाफ मिडल हमला आसान है।

+1

एलडब्ल्यूपी :: प्रोटोकॉल :: https से 6.06 का उन्नयन किया। बहुत बहुत धन्यवाद! नोट: मुझे 6.06 मैन्युअल रूप से स्थापित करना पड़ा, क्योंकि सीपीएन 6.04 का उपयोग करता था – theEli

संबंधित मुद्दे