捕获HTTP状态300以获取重定向下载链接

时间:2013-04-11 09:10:18

标签: javascript jquery ajax google-chrome-extension xmlhttprequest

我正在开发Chrome扩展程序以下载网页上的链接。 我遇到了一些没有直接下载的链接,例如像http://downloads.sourceforge.net/sevenzip/7z920-x64.msi

这样的链接

当我跟踪fiddler上的链接时,我得到 HTTP状态302 (这是一个重定向)。所以我在尝试使用XMLHTTPRequest下载之前测试链接,但我无法检索状态 302 ,XMLHTTPRequest只检索 200 的文件状态?

是否有一个技巧可以让它停在302处,或者可能是AJAX调用的另一种选择?

1 个答案:

答案 0 :(得分:3)

使用chrome.webRequest api可以实现这一点。 302之类的内容通常由浏览器以静默方式处理,但您可以使用此方法停止它们或使其对代码更加可见。

chrome.webRequest.onHeadersReceived.addListener(function(details){
    var redirUrl;
    details.responseHeaders.forEach(function(v,i,a){
      if(v.name == "Location"){
       redirUrl = v.value;
       details.responseHeaders.splice(i,1);  //Kill the redirect
      }
    });
    if(redirUrl)
      details.responseHeaders.push({name:"redirUrl",value:redirUrl});
    return {responseHeaders:details.responseHeaders}; 
},
{urls: ["http://*/*"],tabId:-1},["responseHeaders","blocking"]);

我指定了tabId为-1,这意味着它只适用于不是来自标签的请求,即后台页面。这将默默地阻止重定向,同时允许您访问302状态和要重定向到的网址。