प्रेत HTSPS साइट खोलने में विफल


104

मैं एक https: // साइट खोलने के लिए loadspeed.js उदाहरण के आधार पर निम्नलिखित कोड का उपयोग कर रहा हूं जिसके लिए http सर्वर प्रमाणीकरण की भी आवश्यकता है।

var page = require('webpage').create(), system = require('system'), t, address;

page.settings.userName = 'myusername';
page.settings.password = 'mypassword';

if (system.args.length === 1) {
    console.log('Usage: scrape.js <some URL>');
    phantom.exit();
} else {
    t = Date.now();
    address = system.args[1];
    page.open(address, function (status) {
        if (status !== 'success') {
            console.log('FAIL to load the address');
        } else {
            t = Date.now() - t;
            console.log('Page title is ' + page.evaluate(function () {
                return document.title;
            }));
            console.log('Loading time ' + t + ' msec');
        }
        phantom.exit();
    });
}  

हर समय पृष्ठ लोड करने में इसकी विफलता। यहां क्या गलत हो सकता है? क्या सुरक्षित साइटों को किसी भी अलग तरीके से संभाला जाना चाहिए? साइट को हालांकि ब्राउज़र से सफलतापूर्वक एक्सेस किया जा सकता है।

मैं अभी फैंटम के साथ शुरुआत कर रहा हूं और मुझे इस मुद्दे पर आगे नहीं बढ़ने के बावजूद भी खेलना बंद करना बहुत अच्छा लगता है।

जवाबों:


153

मैंने फ्रेड्स और कैमरन टिंकर के जवाबों की कोशिश की, लेकिन केवल - एलएसएल-प्रोटोकॉल = कोई भी विकल्प मुझे मदद करने लगता है:

phantomjs --ssl-protocol=any test.js

इसके अलावा, मुझे लगता है कि इसका उपयोग करने के लिए सुरक्षित होना चाहिए --ssl-protocol=anyक्योंकि आप अभी भी एन्क्रिप्शन का उपयोग कर रहे हैं, लेकिन --ignore-ssl-errors=trueदुर्भावनापूर्ण लोगों सहित सभी एसएसएल त्रुटियों को अनदेखा करेंगे।


1
मुझे इन 3 तर्कों का उपयोग करना था और इसे हल किया: "--web-security = false", "--ssl-Protocol = any", "--ignore-ssl-त्रुटियाँ = true"। webdriver.PhantomJS (service_args = [ '- उपेक्षा-ssl-त्रुटियों = सच', "--web-सुरक्षा = false", "--ssl प्रोटोकॉल = किसी भी"])
अब्दुल खालिद

123

SSL प्रमाणपत्र त्रुटियों के कारण समस्या सबसे अधिक संभावना है। यदि आप --ignore- ssl- त्रुटियों = हां विकल्प के साथ प्रेत शुरू करते हैं , तो यह पृष्ठ को लोड करने के लिए आगे बढ़ना चाहिए क्योंकि यदि एसएसएल त्रुटियाँ नहीं थीं:

phantomjs --ignore-ssl-errors=yes [phantomOptions] script.js [scriptOptions]

मैंने कुछ वेबसाइटों को गलत तरीके से अपने एसएसएल प्रमाणपत्रों को लागू करने में समस्याएँ देखी हैं या वे समाप्त हो गई हैं, आदि। प्रेत लाइन के लिए कमांड लाइन विकल्पों की एक पूरी सूची यहाँ उपलब्ध है: http://phantomjs.org/api/command-line। एचटीएमएल । आशा है कि ये आपकी मदद करेगा।


2
धन्यवाद, इसने मेरी समस्या को भी हल कर दिया। मेरा मामला, मुझे ब्राउज़र पर प्रमाणपत्र त्रुटि नहीं मिली, इसलिए यह बहुत भ्रामक था, लेकिन मैंने कर्ल क्रिया की और देखा कि जो काम नहीं करता था वह वाइल्डकार्ड सर्टिफ़िकेट (यानी: CN = *। Example.com) का उपयोग कर रहा था। यह अच्छा होगा यदि प्रेत क्रिया के कारण को वापस कर सकते हैं क्योंकि यह विफल क्यों है।
नाको

7
पवित्र बंदर। मैं चाहता हूं कि एसएसएल त्रुटि को समझाया गया, केवल स्टैक ओवरफ्लो और गुलाबी गेंडा ने मुझे मूल कारण को ट्रैक करने में मदद की। धन्यवाद दोस्तों
SimpleGy

खुशी है कि यह लोगों की मदद कर रहा है। शायद PhantomJS को एक और कमांड लाइन तर्क के साथ वर्बोज़ एसएसएल त्रुटियों को प्रदान करने के लिए एक अपडेट की आवश्यकता होगी। मुझे पता है कि Qt में SSL त्रुटि जानकारी उपलब्ध है, लेकिन ज्यादातर बार लोग केवल त्रुटियों को स्पष्ट रूप से हैंडल किए बिना दबा देते हैं।
कैमरन टिंकर

मुझे पता है कि मुझे खेल में देर हो गई है, लेकिन मैंने पाया कि स्क्रिप्ट के नाम के बाद विकल्प जोड़ना काम नहीं करता है - आपको इसे क्रम में कॉल करने की आवश्यकता है:phantomjs --ignore-ssl-errors=yes script.js
simonlchilds

हां, --ignore-ssl-errors=yesविकल्प को स्क्रिप्ट नाम से पहले आना चाहिए। इस बारे में बताने के लिए शुक्रिया।
कैमरन टिंकर

71

ध्यान दें कि 2014-10-16 तक, HTTPS कनेक्शन खोलने के लिए PhantomJS SSLv3 का उपयोग करने में चूक करता है। हाल ही में घोषित POODLE भेद्यता के साथ , कई सर्वर SSLv3 समर्थन को अक्षम कर रहे हैं।

उस के आसपास जाने के लिए, आपको PhantomJS को चलाने में सक्षम होना चाहिए:

phantomjs --ssl-protocol=tlsv1

उम्मीद है, एसएसएल 3 के बजाय टीएलएसवी 1 को डिफ़ॉल्ट बनाने के लिए जल्द ही फैंटमज को अपडेट किया जाएगा।


4
संस्करण 1.9.8 डिफ़ॉल्ट को TLSv1 पर स्विच करता है: github.com/ariya/phantomjs/issues/12670
Andy

मेरे लिए यह निश्चित है, एसएसवी 3 सर्वर पर अक्षम था
क्रिस हेरिंग

2
ध्यान दें कि PhantomJS 1.9.8 में अपडेट करने से एक नया बग बन जाता है
आर्टजोम बी।

यह स्वीकृत उत्तर होना चाहिए। एसएसएल को निष्क्रिय करना या किसी भी प्रोटोकॉल को अनुमति देना मेरी राय में अच्छा समाधान नहीं है। साझा करने के लिए धन्यवाद।
डोमिनिक पी

3
मैं एसएसएल हैंडशेक की समस्याओं से कैसे छुटकारा पा सकता हूं?
१५

24

अनुभवी एक ही मुद्दा ...
--ignore-ssl-त्रुटियों = हाँ मेरे लिए यह तय करने के लिए पर्याप्त नहीं था, दो और कार्य करने की थी:
1) परिवर्तन उपयोगकर्ता-एजेंट
2) सभी ssl-प्रोटोकॉल, केवल एक ही है कि काम करने की कोशिश की सवाल में पृष्ठ के लिए tlsv1 था
आशा है कि यह मदद करता है ...


2
Tsv1 में ssl-प्रोटोकॉल को बदलते हुए मेरे लिए भी काम किया, धन्यवाद!
डेव स्टेब्रानी

1
+1 मेरी समस्या फिक्स्ड, भाग्यशाली तुम नहीं यहाँ मेरे साथ के रूप में मैं आपको अभी चुंबन होगा lol, चियर्स हैं
मार्टिन

मुझे ठीक इसी की आवश्यकता थी। आपका बहुत बहुत धन्यवाद! Tlsv1 के बजाय मैंने "किसी भी" का उपयोग किया और यह भी काम करता है। (मुझे लगता है कि मुझे अन्य ssl वेबसाइटों पर जाना चाहिए, थोड़ा सुरक्षित लगता है।
user1841243

1
उपयोगकर्ता-एजेंट को किस में बदलें?
लुकास स्टीफन

15

मैंने उसी समस्या का अनुभव किया (कास्परिज 1.1.0-बीटा 3 / फैंटमज 1.9.1)। --Ignore-ssl-त्रुटियाँ = Yes और --ssl-प्रोटोकॉल = tlsv1 का उपयोग करके इसे हल किया। केवल एक विकल्प का उपयोग करने से यह मेरे लिए हल नहीं हुआ।


इस ट्रिक ने मेरी समस्या को CI पर निर्धारित किया, एक फैंटमज + बीहट सूट चलाने के बाद (डिबगिंग के 10 घंटे और चीजों को आज़माने के बाद)
ZeNC

हाँ। कुछ मूर्खतापूर्ण घंटों के बाद आपकी टिप्पणी ने मेरा दिन बना दिया!
यारिद्दम

1

मैं प्राप्त कर रहा था

"PhantomJS से SSL संदर्भ बनाने में त्रुटि" (CentOS 6.6 पर चल रहा है)

स्रोत से भवन मेरे लिए तय किया। आपके द्वारा बनाए गए प्रेत का उपयोग करना न भूलें। (इसके बजाय / usr / स्थानीय / बिन / प्रेत यदि आपके पास है)

sudo yum -y install gcc gcc-c++ make flex bison gperf ruby openssl-devel freetype-devel fontconfig-devel libicu-devel sqlite-devel libpng-devel libjpeg-devel
git clone git://github.com/ariya/phantomjs.git
cd phantomjs
git checkout 2.0
./build.sh
cd bin/
./phantomjs <your JS file>

1
मुझे नहीं पता कि लोग आपके उत्तर को नकारात्मक रूप से क्यों रेट करते हैं। ऊपर वर्णित सभी समाधानों की कोशिश करने के बाद, और संघर्ष के दिनों में यह एकमात्र समाधान है जो मेरे लिए काम करता है। फैंटम जेएस क्यूटी के कारण संकलन करने के लिए काफी कष्टप्रद है, लेकिन यह इसके लायक है।
फ्लोरियनबी

0

अगर कोई साहि के साथ फैंटमज का उपयोग कर रहा है, तो --ignore-ssl-errorsविकल्प को आपके ब्राउज़र_टाइप्स.एक्सएमएल फ़ाइल में जाने की आवश्यकता है। इसने मेरे लिए काम किया।

<browserType>
    <name>phantomjs</name>
    <displayName>PhantomJS</displayName>
    <icon>safari.png</icon>
    <path>/usr/local/Cellar/phantomjs/1.9.2/bin/phantomjs</path>
    <options>--ignore-ssl-errors=yes --debug=yes --proxy=localhost:9999 /usr/local/Cellar/phantomjs/phantom-sahi.js</options>
    <processName>"PhantomJS"</processName>
    <capacity>100</capacity>
    <force>true</force>
</browserType>

0

किस बारे में shebang?

यदि आप phantomjsलिपियों को निष्पादित करने के लिए शेबंग का उपयोग कर रहे हैं, तो निम्न शेलबैंग लाइन का उपयोग करें

#!/usr/bin/phantomjs --ignore-ssl-errors=yes
    
var system = require('system');
var webpage = require('webpage');

// ... rest of your script

उपरोक्त उत्तरों में से किसी का उपयोग करें। मुझे व्यक्तिगत रूप से पसंद है --ignore-ssl-errors=yesक्योंकि यह मेरे लूपबैक वेब सर्वर के स्व-हस्ताक्षरित प्रमाण पत्र को मान्य करने के लिए अप्रासंगिक है।


0

यहाँ अन्य किसी भी उत्तर ने मेरी मदद नहीं की; यह हो सकता है कि मैं जिस विशिष्ट साइट पर काम कर रहा था, वह उनके HTTP हेडर के साथ बहुत अधिक उपयुक्त थी। यह काम किया है:

var page = webpage.create();
page.customHeaders = {
    "Connection": "keep-alive"
};

मुझे पता चला कि फैंटमजेएस "कीप-अलाइव" (पूंजीकृत) का उपयोग कर रहा था, और कनेक्शन को जीवित नहीं रखा जा रहा था। :)


0

मैं SSL Handshake Failedकल मिल रहा था । मैंने phantomJS विकल्प ( --ignore-ssl-errors=yesआदि) के कई संयोजनों की कोशिश की , लेकिन उनमें से किसी ने भी काम नहीं किया।

फैंटमजस 2.1.1 में अपग्रेड करना इसे तय करता है।

मैंने https://gist.github.com/julionc/7476620 पर phantomJS स्थापना निर्देशों का उपयोग किया , प्रेत संस्करण को 2.1.1 में बदल दिया।


0

मशीन पर आप एक दूरस्थ सर्वर से कनेक्ट करने के लिए फैंटमज को चलाने की कोशिश कर रहे हैं, "ओपनसिफ़ल सिफर्स" चलाएं। कॉपी करें और --ssl-ciphers = "" कमांड लाइन विकल्प में सूचीबद्ध सिफर चिपकाएँ। यह जोड़ने वाले वेब सर्वर को बताता है कि आपके ग्राहक के साथ संवाद करने के लिए कौन से सिफर उपलब्ध हैं। यदि आप अपनी मशीन पर उपलब्ध नहीं सेट करते हैं, तो यह किसी भी सिफर का उपयोग कर सकता है आपकी मशीन यह नहीं समझती है कि डिफ़ॉल्ट आधुनिक ब्राउज़र ऐसा करते हैं जो डिफ़ॉल्ट सेटिंग के लिए उपयोग किया जाता है।


-2

केवल एक चीज जो मेरे लिए काम करती थी वह 1.9x से 2.x;

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.