PhantomJS가 HTTPS 사이트를 열지 못함


104

http 서버 인증이 필요한 https : // 사이트를 열기 위해 loadspeed.js 예제를 기반으로 다음 코드를 사용하고 있습니다.

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

항상 페이지를로드하지 못합니다. 여기서 무엇이 잘못 되었을까요? 보안 사이트를 다르게 처리해야합니까? 이 사이트는 브라우저에서 성공적으로 액세스 할 수 있습니다.

나는 지금 막 Phantom으로 시작하고 있으며이 문제로 진행하지 않더라도 장난을 멈추는 것이 너무 좋다고 생각합니다.

답변:


153

Fred와 Cameron Tinker의 답변을 시도했지만 --ssl-protocol = any 옵션 만 도움이되는 것 같습니다.

phantomjs --ssl-protocol=any test.js

또한 --ssl-protocol=any여전히 암호화 를 사용하고 있기 때문에 사용하는 것이 더 안전해야한다고 생각 하지만 --ignore-ssl-errors=true악의적 인 오류를 포함하여 모든 SSL 오류를 무시합니다.


1
이 3 가지 인수를 사용해야했고 "--web-security = false", "--ssl-protocol = any", "--ignore-ssl-errors = true"로 해결되었습니다. webdriver.PhantomJS (service_args = [ '-ignore-ssl-errors = true', "--web-security = false", "--ssl-protocol = any"])
Abdul Khalid

123

SSL 인증서 오류로 인한 문제 일 가능성이 큽니다. --ignore-ssl-errors = yes 옵션으로 phantomjs를 시작 하면 SSL 오류가없는 것처럼 페이지로드를 진행해야합니다.

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

SSL 인증서를 잘못 구현하는 데 문제가 있거나 만료 된 등의 문제가있는 웹 사이트를 몇 개 보았습니다. phantomjs에 대한 전체 명령 줄 옵션 목록은 http://phantomjs.org/api/command-line에서 확인할 수 있습니다 . html . 이게 도움이 되길 바란다.


2
감사합니다. 이것은 내 문제도 해결했습니다. 제 경우에는 브라우저에서 Cert 오류가 발생하지 않았기 때문에 매우 혼란 스러웠지만 컬링을했고 작동하지 않는 것이 Wildcard Cert (예 : CN = *. example.com)를 사용하고 있음을 알았습니다. phantomjs가 이것이 실패한 이유에 대한 자세한 이유를 반환 할 수 있다면 좋을 것입니다.
naoko 2014-04-15

7
이런 원숭이. SSL 오류가 설명 되었으면하고 스택 오버플로와 분홍색 유니콘 만 근본 원인을 추적하는 데 도움이되었습니다. 고마워
SimplGy

사람들을 돕는 것이 다행입니다. 아마도 PhantomJS는 다른 명령 줄 인수와 함께 자세한 SSL 오류를 제공하기 위해 업데이트가 필요할 것입니다. SSL 오류 정보가 Qt에서 사용 가능하다는 것을 알고 있지만 대부분의 경우 사람들은 명시 적으로 처리하지 않고 오류를 억제합니다.
Cameron Tinker

게임에 늦었다는 것을 알고 있지만 스크립트 이름 뒤에 옵션을 추가하는 것이 작동하지 않음을 발견 했습니다. 순서대로 호출해야합니다.phantomjs --ignore-ssl-errors=yes script.js
simonlchilds

예, --ignore-ssl-errors=yes옵션은 스크립트 이름 앞에 와야합니다. 지적 해주셔서 감사합니다.
Cameron Tinker 2014 년

71

2014-10-16 현재 PhantomJS는 HTTPS 연결을 열기 위해 SSLv3를 사용하도록 기본 설정되어 있습니다. 와 푸들의 취약점이 최근 발표, 많은 서버는 SSLv3에 지원을 비활성화합니다.

이 문제를 해결하려면 다음을 사용하여 PhantomJS를 실행할 수 있어야합니다.

phantomjs --ssl-protocol=tlsv1

바라건대 PhantomJS가 곧 업데이트되어 SSLv3 대신 TLSv1을 기본값으로 만들 것입니다.


4
버전 1.9.8은 기본값을 TLSv1로 전환합니다. github.com/ariya/phantomjs/issues/12670
Andy Triggs

나를 위해 그것을 고정, SSLv3에 서버에서 비활성화되었습니다
크리스 청어

2
PhantomJS 1.9.8로 업데이트하면 새로운 버그가 발생 합니다.
Artjom B. 2014

이것은 받아 들여진 대답이어야합니다. SSL을 비활성화하거나 프로토콜을 허용하는 것은 제 생각에 좋은 해결책이 아닙니다. 공유해 주셔서 감사합니다.
Dominic P

3
SSL 핸드 셰이크 문제에서 더 자세한 디버깅을 얻으려면 어떻게해야합니까?
wrschneider

24

동일한 문제가 발생했습니다 ...
--ignore-ssl-errors = yes는 저를 위해 해결하기에 충분하지 않았고, 두 가지 추가 작업을 수행해야했습니다.
1) user-agent를 변경 해야합니다.
2) 모든 SSL 프로토콜을 시도했습니다. 문제의 페이지에 대한 tlsv1
이 도움 이 되었기를 바랍니다 .


2
ssl-protocols를 tlsv1로 변경하면 저에게도 효과적이었습니다. 감사합니다!
Dave Stibrany

1
+1 내 문제를 고쳤습니다. 내가 지금 당신에게 키스 할 것이므로 당신이 나와 함께 있지 않다는 것은 행운입니다. lol, 건배
Martin

이것이 바로 내가 필요한 것입니다. 대단히 감사합니다! tlsv1 대신 "any"를 사용했고 이것도 작동합니다. (나는 다른 SSL 웹 사이트를 방문해야 조금 더 안전한 것 같다.
user1841243

1
user-agent를 무엇으로 변경 하시겠습니까?
Lucas Steffen

15

같은 문제가 발생했습니다 (casperjs 1.1.0-beta3 / phantomjs 1.9.7). --ignore-ssl-errors = yes 및 --ssl-protocol = tlsv1을 사용하여 해결했습니다. 옵션 중 하나만 사용해도 문제가 해결되지 않았습니다.


이 트릭은 phantomjs + behat 제품군을 실행하는 codeship CI에 대한 내 문제를 해결했습니다 (~ 10 시간의 디버깅 및 시도 후)
ZeNC

네. 약간의 어리석은 시간 후에 당신의 코멘트가 나의 하루를 만들었다!
Yarimadam

1

나는 받고 있었다

phantomJS (CentOS 6.6에서 실행)에서 "SSL 컨텍스트 생성 오류"

소스에서 빌드하면 문제가 해결되었습니다. 구축 한 phantomjs를 사용하는 것을 잊지 마십시오. (있는 경우 / usr / local / bin / phantomjs 대신)

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
사람들이 왜 당신의 대답을 부정적으로 평가하는지 모르겠습니다. 위에서 언급 한 모든 솔루션을 시도하고 투쟁 한 날이 나에게 효과가 있었던 유일한 솔루션입니다. phantomJS는 qt 때문에 컴파일하기가 상당히 성가 시지만 그만한 가치가 있습니다.
FlorianB 2016

0

누군가 Sahi와 함께 Phantomjs를 사용하는 경우 해당 --ignore-ssl-errors옵션은 browser_types.xml 파일로 이동해야합니다. 그것은 나를 위해 일했습니다.

<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 ?

shebang을 사용하여 phantomjs스크립트 를 실행 하는 경우 다음 shebang 줄을 사용하십시오.

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

PhantomJS가 "Keep-Alive"(대문자로 표시됨)를 사용하고 있으며 연결이 유지되지 않는 것을 발견했습니다. :)


0

나는 SSL Handshake Failed어제 받고 있었다 . phantomJS 옵션의 많은 조합을 시도했습니다 (--ignore-ssl-errors=yes 등) 어느 것도 작동하지 않았습니다.

phantomJS 2.1.1로 업그레이드하면 문제가 해결되었습니다.

https://gist.github.com/julionc/7476620 에서 phantomJS 설치 지침을 사용하여 phantomJS 버전을 2.1.1로 변경했습니다.


0

원격 서버에 연결하기 위해 phantomjs를 실행하려는 시스템에서 "openssl ciphers"를 실행하십시오. 나열된 암호를 복사하여 --ssl-ciphers = ""명령 줄 옵션에 붙여 넣습니다. 이것은 연결 웹 서버에 클라이언트와 통신하는 데 사용할 수있는 암호를 알려줍니다. 자신의 컴퓨터에서 사용 가능한 암호를 설정하지 않으면 기본 설정에 사용되는 기본 최신 브라우저가 수행하는 것을 컴퓨터가 이해하지 못하는 암호를 사용할 수 있습니다.


-2

나를 위해 일한 유일한 것은 phantomjs를 1.9x에서 2.x로 올리는 것입니다.)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.