2013-04-12 2 views
3

테스트 목적으로 adblockplus 코드를 수정하려고했습니다. URL에 http get 요청을 보내고 응답에서 최종 URL을 가져 오도록 코드를 수정했습니다. 아래 코드를 사용해 보았지만 응답에 머리글 응답의 위치 필드가 없습니다. 파이어 폭스 - 확장자 내에서이 작업을 수행하고 있으므로 도메인 간 요청이 문제가되지는 않을 것이라고 생각합니다. 응답에서 위치 입력란을 가져올 수없는 이유는 무엇입니까? 이 작업을 수행하는 더 좋은 방법이 있습니까?XMLHTTPRequest 응답에 헤더에 위치 필드가 없습니다.

입력 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으로 설정 했으므로 이제 헤더의 위치 필드를 가져올 수 있습니다. 는 여기 try 블록이 실행되지 않도록 상태 코드 (200)는, 확인을 의미하기 때문에 내 코드 -

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

답변

1

에 추가 된 것입니다. "위치"필드는 리디렉션에서만 종료되며 상태 코드는 301 또는 302입니다.

해당 url 응답은 302이므로 req.status == 200에서 req.status == 302으로 변경하십시오.

+0

는 그러나 상태 코드 (200)는 요청이 성공적으로 수행되었음을 의미 HEADERS_RECEIVED 상태를, 그래서 그것이 리디렉션하지 않을 수 있습니다 경우에도 HTTP 응답은 위치 필드를 포함해야합니다. –

+0

아니요, httpfox 확장 또는 'curl -i'명령을 사용하여 헤더를 확인할 수 있습니다. – muzuiget

+0

예, 실제로 해당 페이지로 리디렉션되므로 위치 입력란을 가져올 수 없습니다. 이 문제를 어떻게 해결할 수 있습니까? –

1

은 실제로 당신이 readyState == 2를 확인해야 그

관련 문제