通过 Charles 代理 casperjs/phantomjs

Proxying casperjs / phantomjs through Charles

我想使用 casperjs / phantomjs 来自动填充一些网络表单。为了调试我的 casperjs 脚本,我想使用(很棒的)Charles Web Proxy 作为中间人 SSL 代理,但还没有弄清楚如何在 casperjs / phantomjs 中实现它.

什么有效

我已启用 Charles 在 Firefox 和远程服务器之间进行代理。浏览器和远程服务器都接受 SSL 证书,Charles 正确解码 HTTPS 数据包,因此我可以看到浏览器和远程服务器之间的流量。到目前为止一切顺利。

我也能够 运行 我的 casperjs 脚本 没有 Charles 代理并验证我的脚本正确地登录到远程站点,如下所示:

$ casperjs test-login.js
found login form...
logged in...

也不错

什么不起作用

当我尝试通过 Charles 将 phantomjs 定向到代理时,如:

$ casperjs --web-security=no --proxy=127.0.0.1:8888 test-login.js

... casperjs 甚至没有收到登录页面,以下内容显示在 Charles 控制台中:

URL     https://www.<my server>.com
Status  Failed
Failure No request was made. Possibly the SSL certificate was rejected.
Notes   You may need to configure your browser or application to trust the Charles Root Certificate. See SSL Proxying in the Help menu.

我的猜测是 phantomjs 的浏览器不喜欢 Charles 提供的 SSL 证书,但我认为 --web-security=no 应该覆盖它。

我可能漏掉了一些明显的东西。以前有人走过这条路吗?

更新

我偶然发现了解决方案。见下文...

ps

$ casperjs --version
1.1.0-beta3
$ phantomjs --version
1.9.8

... Charles 是 v 3.10.1

(如果回答自己的问题是一项奥林匹克运动,我会争夺金牌。)

添加 --ignore-ssl-errors=true 是必要且足以让事情正常进行的——这样,您可以看到所有通过 Charles 的流量:

$ casperjs --ignore-ssl-errors=true --proxy=127.0.0.1:8888 test-login.js
found login form...
logged in...

注意

明智的话:如果交易似乎确实缓慢,请确保您没有不小心打开 Charles 中的节流。到过那里! :)