2017-04-07 88 views
0

我正在嘗試使用運行JavaScript編寫一段Zap代碼來測試URL GET的HTTP標頭響應。具體來說,我對返回狀態和位置感興趣(基本上,如果它是302,想知道重定向位置是什麼)。獲取HTTP標頭參數

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)在發送出站扎普步驟的輸出變量不撿東西有用的(再次,「原始HTML」,「ID」,「運行時元日誌」等,但沒有我的頭)。

回答

0

您可能無法訪問Location頭由於大多數同源策略瀏覽器: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-位置選擇瀏覽器就不塊。

+0

我不控制服務器資源,因爲它運行在node.js(4.3.2聲明)下執行的Zapier環境中。我不認爲這是瀏覽器相同的來源策略,但症狀指向無法阻止重定向。 –

+0

這假設基於瀏覽器的界面 - 這是Node.js. –

0

由於我們正在使用https://github.com/bitinn/node-fetch#options - 特別是redirect: 'follow'選項。它甚至提供了確切的「設置爲manual來提取重定向標題」。

你可以嘗試一下本地的Node.js REPL來搞清楚它。如果你看到它在本地工作,但不在Zapier中 - 只需向[email protected]提交一個錯誤。

+0

管理得到本地REPL設置工作!我最終不得不深入研究node-fetch測試代碼,但是這樣做:'fetch('https://www.example.com/',{method:'GET',redirect:'manual',follow:0} ).then(function(res){return res;})。then(function(res){var output = {location:res.headers._headers.location,status:res.status}; callback(null,output); })。catch(callback);'同樣的事情**沒有**在Zapier上工作,所以我會記錄一個錯誤並回報。 –

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)用上面的代碼重新插入一個新的代碼,然後返回正確的輸出字段,隨後可用於發送出站電子郵件步驟。