2016-04-21 113 views
0

我需要對代理服務器進行身份驗證,並且在第一個HTTP請求之後,我需要解析代理驗證頭字符串以獲取相關值。如何從HTTP響應頭字符串中提取參數?

的響應報頭是這個樣子,

{ 'content-type': 'text/plain', 
    'proxy-authenticate': 'Digest realm="zippy", qop="auth",nonce="c1e1c76b5df5a8cdc921b48d6a7b5493", algorithm="MD5", stale="false"', 
    date: 'Thu, 21 Apr 2016 00:19:28 GMT', 
    connection: 'close', 
    'transfer-encoding': 'chunked' } 

我想提取代理進行身份驗證的參數(即境界,QOP等),從字符串。

它似乎必須有一些超級簡單的方法來做到這一點,但我只是沒有找到它。

+0

這是一個AJAX請求嗎?請參閱[這個問題](http://stackoverflow.com/questions/1557602/jquery-and-ajax-response-header)和[這個問題](http://stackoverflow.com/questions/220231/accessing-the織網的頁面-HTTP報頭式的JavaScript)。 –

+0

嗨凱文,不,這不是AJAX。它只是從使用http庫的Node開始的一個簡單的帖子。 –

回答

1

只需從JSON中提取您的密鑰,然後將值分割爲,。然後再次使用=分割結果數組的每個值。

$(document).ready(function() { 
    var data = { 
    'content-type': 'text/plain', 
    'proxy-authenticate': 'Digest realm="zippy", qop="auth",nonce="c1e1c76b5df5a8cdc921b48d6a7b5493", algorithm="MD5", stale="false"', 
    date: 'Thu, 21 Apr 2016 00:19:28 GMT', 
    connection: 'close', 
    'transfer-encoding': 'chunked' 
    }; 

    var header = data['proxy-authenticate']; 
    var contents = header.split(','); 

    var pairs = {}; 
    $.each(contents, function(index, value) { 

    var pair = value.split('='); 
    pairs[pair[0]] = pair[1]; 
    }); 

    $('div').html(JSON.stringify(pairs)); 
}); 

這裏是demo

+0

不幸的是,如果其中一個值包含逗號或等號。例如。 'realm =「x,y」'或'nonce =「abcdef ==」'。並進一步列出「QOP」與領先空間! – Joe

+0

@Joe在嘗試從中提取數據之前,必須清理輸入。例如。如果你的輸入可以保證每個值的格式是'{ ='', ='}},那麼你可以在''上分開,'',這將解決你的逗號在一個值內問題,當然如果值本身包含'「,那麼程序將再次失敗。解析之前的任何數據都需要保證一種格式,並基於可以寫入解析器的格式。讓我知道你的想法。 – Rash

+0

@Joe具有多個'='的屬性的第二個問題不能輕易解決。想象一下屬性'abc = d = ef = g'。在這種情況下,沒有人知道哪個'='是分隔符,因此這個值永遠不會被正確解析。正如我所說的,你得到的輸入需要遵循一個模式或定義合同。沒有這種解析將會很困難。讓我知道你的想法。 – Rash