XMLHttpRequest状态码302的问题

5

我正在尝试获取Megaupload链接的真实路径,但总是失败。

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);

}

我需要这个链接:

Redirect to: http://www534.megaupload.com/files/c2c36829bc392692525f5b7b3d9d81dd/Coldplay - Warning Sign.mp3

替代这样做:
http://www.megaupload.com/?d=6CKP1MVJ

在我看来,这个URL是存在的(返回200而不是302)。如果你需要另一个链接,为什么不直接使用那个链接呢?或者你是想写一些通用的megaupload下载代码吗? - Eran Zimmerman Gonen
1个回答

9

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")


这似乎不再起作用了。在Chrome(29.0)中,我得到Uncaught ReferenceError:Components未定义,在Firefox(24.0)中,我得到TypeError:xhr.channel未定义。 此外,MDN上的Components页面表示您不应再使用它。https://developer.mozilla.org/en/docs/Components_object - mflodin
1
@mflodin:这是关于Firefox扩展的问题。这段代码在Chrome中不起作用并不令人惊讶。而且,在Firefox中,像XMLHttpRequest.channel这样的低级API对于网页来说是不可访问的也不足为奇。只有特权代码(即扩展)才能访问它。 - Wladimir Palant
1
@WladimirPalant 啊,抱歉。我错过了那个。有很多关于302问题的Stack Overflow问题需要回答。我会在未来更仔细地检查标签的。 - mflodin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接