3

テスト目的で adblockplus コードを変更しようとしていました。URL で http get 要求を送信し、応答から最終的な URL を取得するようにコードを変更していました。以下のコードを使用してみましたが、応答のヘッダー応答に Location フィールドが含まれていません。私はこれをFirefox拡張機能内で行っているので、クロスドメインリクエストが問題になるとは思わない. 応答から Location フィールドを取得できないのはなぜですか? このタスクを達成するためのより良い方法はありますか?

入力 URL - http://netspiderads3.indiatimes.com/ads.dll/clickthrough?msid=17796167&cid=3224&slotid=1203&nsRndNo=817685688

期待される出力 - http://www.mensxp.com/

実際の出力場所: null

これが私が使用しているコードです-

function geturl(url){
let req= Cc["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance(Ci.nsIXMLHttpRequest);
req.open("GET", url);
req.overrideMimeType("text/plain");
req.send(null);
req.onreadystatechange = function() {
if (req.readyState == 4) 
{ if (req.status == 200) 
  { try 
    {
       location = req.getResponseHeader("Location");
       console.log("Location is: " + location);
    }
    catch(e){
    console.log("Error reading the response: " + e.toString());
  }
 }
}

解決策-

私は最終的にこれに対する解決策を見つけました。私は最終的な応答を得ていませんでした。そのため、リダイレクト制限を 0 に設定すると、ヘッダーの Location フィールドを取得できるようになりました。これが私のコードに追加したものです-

if (request.channel instanceof Ci.nsIHttpChannel)
    request.channel.redirectionLimit = 0;
4

2 に答える 2

1

ステータス コード 200 は OK を意味するため、try ブロックは実行されません。「場所」フィールドは、ステータス コードが 301 または 302 のリダイレクトでのみ終了します。

その URL レスポンスは 302 なので、 に変更req.status == 200req.status == 302ます。

于 2013-04-12T09:31:01.500 に答える