The problem may be related to the recent discovery of a SSLv3 vulnerability (POODLE). Website owners were forced to remove SSLv3 support from their websites. Since PhantomJS < v1.9.8 uses SSLv3 by default, you should use TLSv1:
casperjs --ssl-protocol=tlsv1 yourScript.js
The catchall solution would be to use any
for when newer PhantomJS versions come along with other SSL protocols. But this would make the POODLE vulnerability exploitable on sites which haven't yet disabled SSLv3.
casperjs --ssl-protocol=any yourScript.js
Alternative method: Update to PhantomJS 1.9.8 or higher. Note that updating to PhantomJS 1.9.8 leads to a new bug, which is especially annoying for CasperJS.
How to verify: Add a resource.error
event handler like this at the beginning of your script:
casper.on("resource.error", function(resourceError){
console.log('Unable to load resource (#' + resourceError.id + 'URL:' + resourceError.url + ')');
console.log('Error code: ' + resourceError.errorCode + '. Description: ' + resourceError.errorString);
});
If it is indeed a problem with SSLv3 the error will be something like:
Error code: 6. Description: SSL handshake failed
As an aside, you also might want to run with the --ignore-ssl-errors=true
commandline option, when there is something wrong with the certificate.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…