2011-09-23 104 views
3

我想在鏈接megaupload中獲得真正的路徑,但總是這樣,但不工作。xmlhttprequest狀態問題302

function getRealURL(){ 

    var st = new String(""); 
    var req = new XMLHttpRequest(); 
    req.open("GET","http://www.megaupload.com/?d=6CKP1MVJ",true); 
    req.send(null); 
    req.send(null); 
    req.onreadystatechange = function (aEvt) { 
    if (req.readyState == 4) { 
     if(req.status == 302){ 
      //SUCESSO 
      st = req.responseText; 
     } 
     } 
    };//funcao 

    element.getElementById("id").setAttribute("value", st); 

} 

我需要這個鏈接:重定向到:http://www534.megaupload.com/files/c2c36829bc392692525f5b7b3d9d81dd/Coldplay - 警告Sign.mp3

這個insted的:http://www.megaupload.com/?d=6CKP1MVJ

+0

在我看來,這個URL存在(返回200,而不是302)。如果您需要其他鏈接,爲什麼不直接使用該鏈接?或者你是否想爲megaupload下載寫一些通用的東西? –

+0

是的,我在努力。謝謝,工作。 – user916933

回答

5

XMLHttpRequest默認自動跟蹤重定向,所以你看不到302響應。您需要nsIHttpChannel.redirectionLimit屬性設置爲零,以防止它:

req.open("GET","http://www.megaupload.com/?d=6CKP1MVJ",true); 
req.channel.QueryInterface(Components.interfaces.nsIHttpChannel).redirectionLimit = 0; 
req.send(null); 

不是說你在這裏使用的鏈接重定向的任何地方,但是這是一般的做法。順便說一句,而不是查看重定向的響應文本,你應該看看req.getResponseHeader("Location")

+0

這似乎不工作了。在Chrome(29.0)中,我得到'未捕獲的ReferenceError:組件未定義,並且在Firefox中(24.0),我得到'TypeError:xhr.channel未定義。 此外,組件上的MDN頁面表示您不應再使用它。 https://developer.mozilla.org/en/docs/Components_object – mflodin

+0

@mflodin:這是一個關於** Firefox擴展**的問題。這段代碼在Chrome中無法使用並不奇怪。另外,Firefox中的網頁不能訪問像XMLHttpRequest.channel這樣的低級API,這並不令人驚訝。只有特權代碼(意味着擴展名)才能訪問它。 –

+0

@WladimirPalant啊,對不起。我錯過了。有很多關於302問題的堆棧溢出問題。我一定會在將來更仔細地檢查標籤。 – mflodin