获取HTTP标头参数

时间:2017-04-07 13:36:15

标签: javascript http header zapier

我正在尝试用Run JavaScript编写一段Zap代码来测试URL GET的HTTP头响应。具体来说,我对返回状态和位置感兴趣(基本上,如果它是302,想知道重定向位置是什么)。

fetch('https://www.example.com/', { method: 'GET', redirect: 'manual' })
  .then(function(res) {
    return res.json();
  })
  .then(function(json) {
    var output = {status: json.status, location: json.headers.get('location')};
    callback(null, output);
  })
  .catch(callback);

我已经尝试了上述但是(a)测试总是返回rawHTML(表明它是在重定向之后,并且(b)Send Outbound Zap步骤中的输出变量没有拾取任何有用的东西(同样, “原始HTML”,“ID”,“运行时元日志”等,但我的标题没有任何内容。

3 个答案:

答案 0 :(得分:0)

由于大多数浏览器中的原始政策相同,您可能无法访问位置标头:https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy

此外,您无法通过重定向停止AJAX调用,因此可能会导致问题:How to prevent jQuery ajax from following a redirect after a post?

看起来您正在使用新的内置提取功能:https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch

如果是这样,在提供的示例中,我认为您不需要.json()调用。我得到的代码如下所示,但是在example.com上没有重定向,所以不确定你的情况将如何处理。另外,请记住可能禁止您访问位置标题的同源策略。

var callback = function(a,b){
  console.log(a,b)
};
fetch('https://www.example.com/', { method: 'GET', redirect: 'manual' })
  .then(function(res) { 
    console.log (res)
    var output = {status: res.status, location: res.headers.get('location')};
    callback(null, output);
  })
  .catch(callback);

如果您控制服务器资源,那么您可以在服务器上执行某些操作,例如添加另一个不会被阻止的标头,许多网站会添加浏览器不会添加的X-Location选项块。

答案 1 :(得分:0)

因为我们正在使用https://github.com/bitinn/node-fetch#options - 特别是redirect: 'follow'选项。它甚至提供了“设置为manual以提取重定向标题”。

您可以尝试使用本地Node.js REPL来解决问题。如果你看到它在本地工作但不在Zapier工作 - 只需向contact@zapier.com提交一个错误。

答案 2 :(得分:0)

我设法让这段代码正常工作:

fetch('https://www.example.com/', { method: 'GET', redirect: 'manual', follow: 0 })
  .then(function(res) {
    var output = {status: res.status, location: res.headers._headers.location};
    callback(null, output);
  })
  .catch(callback);

潜在的问题似乎是(由输出变量“id”和“rawHTML”证明)字段以某种方式“卡住”。当我(1)删除Run Javascript步骤时,(2)重新插入带有上述代码的新文件,然后返回正确的输出字段,随后可用于发送出站电子邮件步骤。