Получить ответ заголовок / тело - PullRequest
2 голосов
/ 10 октября 2011

Я разрабатываю аддон для Firefox и слушаю http ответы вроде этого:

var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
observerService.addObserver(httpObserver, "http-on-examine-response", false);

Который вызывает мой объект httpObserver, который выглядит следующим образом:

var httpObserver =
{
 observe : function(aSubject, aTopic, aData) 
 {  
            aSubject.QueryInterface(Components.interfaces.nsIHttpChannel);
            httpstatus = aSubject.responseStatus;
            if(httpstatus == 200 && aSubject.contentType.toString().indexOf("text/") != -1)
            {
                alert("URL: " + aSubject.name + "\r\nStatus: " + httpstatus + "\r\nContentType: " + aSubject.contentType); //Works great
                alert("Body: " + aSubject.responseText); //Is undefined, why?
            }
            else if(httpstatus == 404 && aSubject.contentType.toString().indexOf("text/html") != -1)
                alert("Page not found!\r\nURL: " + aSubject.name + "\r\nContentType: " + aSubject.contentType);
 }
};

У меня есть следующие проблемы:

Я бы хотел получить целое тело и заголовок из ответа, но я не знаю как. Однажды я прочитал, что это может быть проблемой, что сервер находится не в том же домене, но как тогда Firefox справляется с этим?

Я уже провел много исследований, но ничего полезного не нашел, может, что-то упустил ..

Кстати: у меня есть доступ и к объекту запроса, если это поможет.

1 Ответ

3 голосов
/ 10 октября 2011

Для этого вы бы использовали nsITraceableChannel интерфейс , он реализуется всеми HTTP-запросами. Это позволяет вам заменить прослушиватель канала одним из ваших собственных, так что вы можете прочитать данные в вызове onDataAvailable перед передачей их исходному прослушивателю. Вот пример кода, который делает именно это: http://www.softwareishard.com/blog/firebug/nsitraceablechannel-intercept-http-traffic/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...