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.