cookies - phantomjs - 没有为任何 XHR/POST/GET AJAX 请求发送 Cookie

标签 cookies xmlhttprequest phantomjs

我在尝试使用 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(我检查了 header )。

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

最佳答案

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

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

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

如果您不想浏览整个文件,基本上:
Phantomjs 的行为类似于常规浏览器,它会在浏览器关闭时删除所有 session 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();
希望这可以帮助。

关于cookies - phantomjs - 没有为任何 XHR/POST/GET AJAX 请求发送 Cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20953864/

相关文章:

javascript - 如何在 Webextension 中以正确的权限运行跨域 XHR 请求?

javascript - 根据过滤器的值有条件地添加 ng-animate 指令

javascript - 从 URL JSON 检索数据

http - cookies——误解

javascript - 设置站点范围的 Cookie

asp.net - Web API 和 SignalR Web 应用程序 - 身份验证和授权

asp.net - 帮助从 HttpContext.InputStream 读取 JSON

javascript - 如何等待 PhantomJS 的 fs.write 完成写入

javascript - 我可以从 mocha/phantomjs 单元测试中获取页面截图吗?

循环中的 Javascript onclick 事件执行超过 1 次