通过 Charles 代理 casperjs / phantomjs

Posted

技术标签:

【中文标题】通过 Charles 代理 casperjs / phantomjs【英文标题】:Proxying casperjs / phantomjs through Charles 【发布时间】:2015-05-18 00:00:59 【问题描述】:

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

什么有效

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

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

$ 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

...查尔斯是 v 3.10.1

【问题讨论】:

网络性能非常慢是 PhantomJS 1.9 的已知问题之一:phantomjs.org/release-1.9.html 建议在此处完全禁用代理,在您的情况下,显然无法做到。 实际上,我可能不小心在 Charles 中打开了节流。我会重新运行 - 这可能是一个非问题。 【参考方案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 中的节流。到过那里! :)

【讨论】:

以上是关于通过 Charles 代理 casperjs / phantomjs的主要内容,如果未能解决你的问题,请参考以下文章

如何配置 Ruby Mechanize 代理以通过 Charles Web 代理工作?

charles SSL代理设置

SSL 代理/Charles 和 Android 问题 [关闭]

SSL 代理/Charles 和 Android 问题 [关闭]

charles

Charles如何配置代理抓去HTTP/HTTPS请求