首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >phantomjs没有为任何XHR/POST/GET AJAX请求发送Cookie

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

Stack Overflow用户
提问于 2014-01-06 23:57:55
回答 1查看 1.9K关注 0票数 17

当我尝试使用PhantomJS登录时,我发现了一个有趣的问题。我不知道为什么会发生这样的事情。

基本上,您可以像这样启动一个远程调试器:

代码语言:javascript
复制
/usr/local/bin/phantomjs --web-security=no --remote-debugger-port=13379 --remote-debugger-autorun=yes /tmp/test.js 

在远程调试器中:

代码语言:javascript
复制
> 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会给我一个一般性的错误,因为没有cookie与phantomjs一起发送(我检查了头部)。

我很困惑为什么phantomjs不将cookie与POST请求一起发送。有人知道如何让phantomjs发送所有请求的cookie吗?设置cookie文件也不会有任何不同。

EN

回答 1

Stack Overflow用户

发布于 2015-11-11 08:59:59

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

这里有一个巨大的帖子,关于负责phantomjs的cookies功能的开发人员和一些和你有相同问题的人。

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

如果你不想浏览整个文件,基本上: Phantomjs的行为就像一个普通的浏览器,当浏览器关闭时,它会删除所有的会话cookie,在你的例子中,当你的脚本执行结束时。

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

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

在线程中,有几个函数可以用来实现这一点。

代码语言:javascript
复制
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();

霍普,这有帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20953864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档