PhantomJS 向请求添加超过 1 个 cookie

PhantomJS add more than 1 cookie to the request

我无法向请求添加 1 个以上的 cookie,这是我的 javascript 1 个 cookie:

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

phantom.addCookie({

  'name'     : 'TestCookie_Name_201312174009',   /* required property */
  'value'    : 'TestCookie_Value_164009',  /* required property */
  'domain'   : 'www.miau.com',        /* required property */
  'path'     : '/',
  'httponly' : true,
  'secure'   : false,
  'expires'  : (new Date()).getTime() + (1000 * 60 * 60)   /* <-- expires in 1 hour */
});



page.open('http://www.miau.com', function() {
    setTimeout(function() {
        //page.render('google.png');
        phantom.exit();
    }, 200);
});

然后我通过代理启动它以查看请求:

phantomjs --ignore-ssl-errors=true --disk-cache=true --proxy=http://127.0.0.1:8080 --web-security=false test.js

cookie 添加正常,但后来我尝试了 2 个 cookie:

它不起作用,我也试过这个其他选项,把它当作一个列表

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

phantom.addCookie([{

  'name'     : 'TestCookie_Name_201312174009',   /* required property */
  'value'    : 'TestCookie_Value_164009',  /* required property */
  'domain'   : 'www.miau.com',        /* required property */
  'path'     : '/',
  'httponly' : true,
  'secure'   : false,
  'expires'  : (new Date()).getTime() + (1000 * 60 * 60)   /* <-- expires in 1 hour */
}
,
{
  'name'     : 'TestCookie_Name_2',   /* required property */
  'value'    : 'TestCookie_Value_2',  /* required property */
  'domain'   : 'www.miau.com',        /* required property */
  'path'     : '/',
  'httponly' : true,
  'secure'   : false,
  'expires'  : (new Date()).getTime() + (1000 * 60 * 60)   /* <-- expires in 1 hour */
}]);

但是,我还是没能成功....

我试过的另一件事是:

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

phantom.addCookie({

  'name'     : 'TestCookie_Name_201312174009',   /* required property */
  'value'    : 'TestCookie_Value_164009',  /* required property */
  'domain'   : 'www.miau.com',        /* required property */
  'path'     : '/',
  'httponly' : true,
  'secure'   : false,
  'expires'  : (new Date()).getTime() + (1000 * 60 * 60)   /* <-- expires in 1 hour */
});

phantom.addCookie({

  'name'     : 'TestCookie_Name_2',   /* required property */
  'value'    : 'TestCookie_Value_2',  /* required property */
  'domain'   : 'www.miau.com',        /* required property */
  'path'     : '/',
  'httponly' : true,
  'secure'   : false,
  'expires'  : (new Date()).getTime() + (1000 * 60 * 60)   /* <-- expires in 1 hour */
});

page.open('http://www.miau.com', function() {
    setTimeout(function() {
        //page.render('google.png');
        phantom.exit();
    }, 200);
});

查看 PhantomJS 文档:

addCookie(Object) {Boolean}

Introduced: PhantomJS 1.7

Add a Cookie to the CookieJar. Returns true if successfully added, otherwise false.

它指的不是多个 cookie。因此,查看 phantom.cookies 保存 cookiejar 的变量 - 我们发现以下内容:

phantom.cookies {Object[]}

Introduced: PhantomJS 1.7

Get or set Cookies for any domain (though, for setting, use of phantom.addCookie is preferred). These Cookies are stored in the CookieJar and will be supplied when opening pertinent WebPages.

This array will be pre-populated by any existing Cookie data stored in the cookie file specified in the PhantomJS startup config/command-line options, if any.

上面的文档引用告诉我们,幻像对象内的 cookies 变量是一个对象数组。因此必须可以分配多个。 通过快速查看测试,我们注意到有一个分配多个 cookie 的测试 - 请参阅 github:

中的引用代码行

Cookies Array

Cookies Array gets assigned

基本上这告诉我们,可以通过简单调用分配多个 cookie:

phantom.cookies = [{

  'name'     : 'TestCookie_Name_201312174009',   /* required property */
  'value'    : 'TestCookie_Value_164009',  /* required property */
  'domain'   : 'www.miau.com',        /* required property */
  'path'     : '/',
  'httponly' : true,
  'secure'   : false,
  'expires'  : (new Date()).getTime() + (1000 * 60 * 60)   /* <-- expires in 1 hour */
}
,
{
  'name'     : 'TestCookie_Name_2',   /* required property */
  'value'    : 'TestCookie_Value_2',  /* required property */
  'domain'   : 'www.miau.com',        /* required property */
  'path'     : '/',
  'httponly' : true,
  'secure'   : false,
  'expires'  : (new Date()).getTime() + (1000 * 60 * 60)   /* <-- expires in 1 hour */
}];