phantomjs - 不会为任何XHR / POST / GET AJAX请求发送Cookie?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (168)

尝试使用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文件也没有任何区别。

提问于
用户回答回答于

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

下面是开发者负责phantomjs的cookies功能以及与您的问题相同的一些人的一个巨大线索。

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();

所属标签

可能回答问题的人

  • Richel

    9 粉丝0 提问3 回答
  • 无聊至极

    6 粉丝504 提问2 回答
  • 学生

    8 粉丝476 提问2 回答
  • 风华一代

    3 粉丝469 提问2 回答

扫码关注云+社区

领取腾讯云代金券