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

时间:2014-01-06 15:57:55

标签: 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(我检查了标题)。

我很担心为什么phantomjs不会发送带有POST请求的cookie。有谁知道我们怎么能让phantomjs发送带有所有请求的cookie呢?设置cookie文件也没有任何区别。

1 个答案:

答案 0 :(得分:1)

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

对开发人员来说,负责phantomjs的cookies功能和一些与你的问题相同的人有很大的线索。

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

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

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

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

在线程上有几个可用于执行此操作的函数。

    $variableLoop=0;
    while($row = $result->fetch_assoc())
    {
        $array[]=$row['close'];
        if($variableLoop >= 19){
            $result=0;
            for($i=$variableLoop-19;$i<=$variableLoop;$i++){
                $result+=$array[$i];
            }
            $average=$result/20;
            //print or whatever you need to do with average and result
        }
        $variableLoop++;
    }

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

您可以下载源代码并重新发送phantomjs

您需要修改 src / cookiejar.cpp 并删除或评论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();

希望,这有帮助。