Chrome Extension - comment obtenir un corps de réponse HTTP?

Il semble être difficile (ou impossible??). Je veux obtenir et lire la réponse HTTP, causée par la requête HTTP dans le navigateur, sous regarder le script D'arrière-plan de L'Extension Chrome. Nous pouvons obtenir le corps de la requête HTTP de cette façon

chrome.webRequest.onBeforeRequest.addListener(function(data){
    // data contains request_body
},{'urls':[]},['requestBody']);

j'ai aussi vérifié ces flux stackoverflows

y a-t-il une façon intelligente d'obtenir le corps de réponse HTTP dans L'Extension Chrome?

19
demandé sur Community 2013-08-30 17:59:35

2 réponses

Je ne trouve pas de meilleur moyen que celui-ci anwser.

extension Chrome pour lire la réponse HTTP

l'anwser a dit comment obtenir en-têtes de réponse et afficher dans une autre page.Mais il n'y a pas d'information corporelle dans la réponse obj(voir event-responsiereceived). Si vous souhaitez obtenir de réponse corps sans une autre page, essayez ceci.

var currentTab;
var version = "1.0";

chrome.tabs.query( //get current Tab
    {
        currentWindow: true,
        active: true
    },
    function(tabArray) {
        currentTab = tabArray[0];
        chrome.debugger.attach({ //debug at current tab
            tabId: currentTab.id
        }, version, onAttach.bind(null, currentTab.id));
    }
)


function onAttach(tabId) {

    chrome.debugger.sendCommand({ //first enable the Network
        tabId: tabId
    }, "Network.enable");

    chrome.debugger.onEvent.addListener(allEventHandler);

}


function allEventHandler(debuggeeId, message, params) {

    if (currentTab.id != debuggeeId.tabId) {
        return;
    }

    if (message == "Network.responseReceived") { //response return 
        chrome.debugger.sendCommand({
            tabId: debuggeeId.tabId
        }, "Network.getResponseBody", {
            "requestId": params.requestId
        }, function(response) {
            // you get the response body here!
            // you can close the debugger tips by:
            chrome.debugger.detach(debuggeeId);
        });
    }

}

je pense que c'est assez utile pour moi et vous pouvez utiliser chrome.debugger.detach(debuggeeId)pour fermer le laid de la pointe.

désolé, mabye pas utile... ^ ^

15
répondu liyangready 2017-05-23 12:17:51
// manifest -  "permissions":["tabs","webRequest","webRequestBlocking","<all_urls>","debugger"]
var check_attached_tabs={};
chrome.webRequest.onBeforeRequest.addListener
(   
function callOnBeforeRequest(details){
    //if(details.type!=='main_frame'){return;} 
    var tabId=details.tabId;
    if(tabId==-1){return;}
    var check_atach=false;
    if(!(tabId in check_attached_tabs)){
        check_attached_tabs[tabId]={};
    }
    if(check_attached_tabs[tabId].attached===true){
        check_atach=true;
    }
    if(check_atach==false){
        chrome.debugger.attach({  // chrome.debugger.attach must be declared before all requests begin
            tabId:  tabId
        }, '1.0', function(){
            // Point for errors
            if('lastError' in chrome.runtime){
             //error when you open a new tab will appear (+) without reference
                if( chrome.runtime.lastError.message=='Cannot access a chrome:// URL'){
                    return;
                }
                console.log( chrome.runtime.lastError );
            }
            //----
            //check_attached_tabs[tabId].attached=true;
            chrome.debugger.sendCommand({ //activaiton networks trafic  for debugger 
                tabId:  tabId
            }, "Network.enable");
            check_attached_tabs[tabId].attached=true;
            console.log('attach');
        });
        if(!('events' in check_attached_tabs[tabId])){
            check_attached_tabs[tabId].events={
                attach:function call(source, method, params){
                    // point for filtered request
                    if ( tabId != source.tabId) {
                        return;
                    }
                    //Point for commands  - https://chromedevtools.github.io/devtools-protocol/tot/Network
                    if (method == "Network.loadingFinished") {
                    //console.log(source, method, params);

                    // Point for errors
                         chrome.debugger.sendCommand({
                            tabId: source.tabId
                        }, "Network.getResponseBody", {
                            "requestId": params.requestId
                        }, function(response) {
                            // Point for errors
                            if('lastError' in chrome.runtime){
                                //console.log( chrome.runtime.lastError );
                                if( chrome.runtime.lastError.message=='{"code":-32000,"message":"No resource with given identifier found"}'){
                                  //will error  occur when the query returns nothing
                                    return;
                                }
                            }
                            //point response body for result ; 
                            console.log(response);
                        }); 
                    }
                },
                detach:function(source,reason){
                    if(source.tabId in check_attached_tabs){
                        console.log('detach');
                        chrome.debugger.onEvent.removeListener(check_attached_tabs[source.tabId].events.attach);
                        chrome.debugger.onDetach.removeListener(check_attached_tabs[source.tabId].events.detach);
                        delete check_attached_tabs[source.tabId];
                    }
                }
            }
            chrome.debugger.onEvent.addListener(check_attached_tabs[tabId].events.attach);
            chrome.debugger.onDetach.addListener(check_attached_tabs[tabId].events.detach);
        }
    }       

},
{urls:['<all_urls>']},
["requestBody"]
);
chrome.tabs.onRemoved.addListener
(
function(tabId) {
    chrome.debugger.getTargets(function(targets){
        for(var target of targets){
            if(target.tabId==tabId && target.attached==true){
                chrome.debugger.detach( {tabId:tabId}, function(){});
                break;
            }
        }
    });
}
);
chrome.runtime.onSuspend.addListener 
(
function(){
    for(var tabId in check_attached_tabs){
        chrome.debugger.detach( {tabId:tabId}, function(){});
    }

}
);
-2
répondu AlexP0708 2018-06-25 19:10:52