【问题标题】:phantomjs - Cookie is not being sent for any XHR/POST/GET AJAX requestsphantomjs - 没有为任何 XHR/POST/GET AJAX 请求发送 Cookie
【发布时间】:2014-01-24 02:05:14
【问题描述】:

我在尝试使用 PhantomJS 登录时发现了一个有趣的问题。我不知道为什么它实际上会发生。

基本上你像这样启动一个远程调试器:

/usr/local/bin/phantomjs --web-security=no --remote-debugger-port=13379 --remote-debugger-autorun=yes /tmp/test.js 

在远程调试器中:

> location.href = "https://www.mysite.com/login"
> $('input[name="username_or_email"]').val('blah@email.com')
> $('input[name="password"]').val('wrongpassword')

> $('button[type="submit"]').submit()

在 Chrome 中执行此操作会在 XHR 请求后给我正确的“密码错误”消息,而使用 phantomjs 会给我一个一般错误,因为没有使用 phantomjs 发送 cookie(我检查了标头)。

我很困惑为什么 phantomjs 不通过 POST 请求发送 cookie。有谁知道我们如何让 phantomjs 按应有的方式发送带有所有请求的 cookie?设置 cookie 文件也没有任何区别。

【问题讨论】:

  • Hey Geesu,您找到解决问题的方法了吗?我遇到了类似的问题。 stackoverflow.com/questions/23679287/…
  • 不幸的是我从来没有这样做过。我刚刚放弃使用 phantomjs 并开始使用 Mechanize gem 来伪造请求(就像 Net::HTTP 一样)。
  • 在上面添加了一个赏金 - 我发现许多线程解决了这个问题,但没有答案。哈!

标签: cookies xmlhttprequest phantomjs


【解决方案1】:

好的,这似乎与会话 cookie 而不是常规 cookie 有关。

这是一个关于负责 phantomjs 的 cookie 功能的开发人员和一些与你有同样问题的人的巨大线程。

https://groups.google.com/forum/#!msg/phantomjs/2UbPkIibnDg/JLV9jBKxhIQJ

如果您不想浏览整个文件,基本上: Phantomjs 的行为类似于普通浏览器,它会在浏览器关闭时删除所有会话 cookie,在您的情况下,当您的脚本执行结束时。

因此,即使您设置了 --cookies-file=/path/to/cookies.txt 选项,您也只会在其上存储常规 cookie,以供后续执行。

您有两种可能的方法。一种是在同一个脚本中发出所有请求,另一种是手动存储和恢复 cookie。

在线程上,您可以使用几个函数来执行此操作。

function saveCookies(sessionCookieFile, page) {
    var fs = require("fs");
    fs.write(sessionCookieFile, JSON.stringify(page.cookies));
}

function restoreCookies(sessionCookieFile, page) {
    var fs = require("fs");
    var cookies = fs.read(sessionCookieFile);
    page.cookies = JSON.parse(cookies);
}

var page = require('webpage').create();

而且,如果一切都失败了……

您可以下载源代码并重新复制 phantomjs

您需要编辑 src/cookiejar.cpp 并删除或评论purgeSessionCookies();

希望,这会有所帮助。

【讨论】:

  • 这个问题没有表明这是在重复执行还是在单次执行中发生,所以我假设它是单次执行,在这种情况下你的答案不适用。此外,您链接到的线程描述了一个相当旧的 PhantomJS 版本的问题。我已成功使用--cookies-file 在 PhantomJS 1.9.7 及更高版本中存储“会话 cookie”(仅 HTTP)。这个答案至少已经过时了。
猜你喜欢
  • 2016-04-18
  • 2015-12-07
  • 2015-09-07
  • 1970-01-01
  • 1970-01-01
  • 2013-01-05
  • 2015-07-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多