如何在PhantomJS脚本中传递customHeaders作为系统参数?

时间:2016-05-25 05:47:15

标签: javascript header phantomjs

我已经开始使用PhantomJS进行屏幕截图的小概念验证,我将获得所有必要的配置作为系统参数,如URL,超时,isScreenshotReqd,isHarFileReqd,isHeadersReqd,用户名,密码和一些应用程序相关配置。除customHeaders外,一切正常。

我使用的代码是

if (system.args.length === 1) {
    console.log('Usage: phantom.js <some URL>');
    phantom.exit(1);
} else {
    assembleId = system.args[2];
    page.address = system.args[3];
    page.settings.resourceTimeout = system.args[4];
    isScreenshotReqd = system.args[5];
    isHeadersReqd = system.args[6];
    isHarFileReqd = system.args[7];
    page.settings.userName = system.args[8];
    page.settings.password = system.args[9];
    var key = "headerKey";//(or system.args[10])
    var value = "headerValue";//(or system.args[11])
    page.customHeaders = {key : value};
   //some operation
}

这会将customHeader设置为

"headers": [{"name": "key","value": "headerValue"}]

您可以看到值已正确设置,但密钥不是从初始化变量或system.args[x]获取的,而是采用我使用的任何变量。

虽然如果我像

那样硬编码customHeaders,它会起作用
page.customHeaders = {"headerKey": "headerValue"};

给出了预期的输出,但问题是我将为各种URL提供动态标头。这意味着它是由配置驱动的,每个客户都会为每个URL提供不同的标题。

1 个答案:

答案 0 :(得分:2)

JavaScript不允许将变量用作对象键。您必须以这种方式设置变量键:

var key = "some dynamic key";
var value = "some value"
var obj = {};
obj[key] = value;

PhantomJS的另一个问题&#39; customHeaders是需要将其设置为整体。 PhantomJS没有注意到customHeaders对象的属性已经改变。您可以像这样使用它:

var key = "headerKey";
var value = "headerValue";
var customHeaders = {};
customHeaders[key] = value;
page.customHeaders = customHeaders;