2012-01-20 11 views
1

リクエストのヘッダーを送信する前にこのChrome拡張機能を使用しています。私は今、同じ拡張子の中で、応答のヘッダーをチェックできるようにしたいと考えています。 Chrome拡張API全体で検索しましたが、興味のあるものは見つかりませんでした。HTTP応答を読み取るためのChrome拡張子

これは私がリクエストのヘッダーを変更するために使用するコードです。私がどのようにそれを行うのか知っておくと便利かもしれません。

chrome.webRequest.onBeforeSendHeaders.addListener(
     function(details) {/*do something*/}, 
     {urls: ["<all_urls>"]}, 
     ["blocking", "requestHeaders"]); 

誰もがそれを行う方法を知っている、または面白い源に私を指すことができますか?ありがとう

+0

現在のところ、Chrome拡張機能を探しています(独自の方法を知りません)。レスポンスヘッダーを変更できます。具体的には、Chromeが 'x-png'(初期の古いバグ、まだ修正されていない)を理解していないため、特に_Content-Type_' image/x-png'を 'image/png'に動的に変更したいと思います。エクステンションの作成に成功しましたか?そうであれば、私の必要なことをすることができますか? – kriegaex

+0

アップデート:Chrome拡張機能「リダイレクタ」が私の必要とするものです。ありがとう。 – kriegaex

答えて

2

ライブヘッダーの例を参照してください。

http://code.google.com/chrome/extensions/examples/api/debugger/live-headers.zip

+0

私が間違っている場合は正しいと思いますが、 'chrome.experimental.debugger.onEvent.addListener(aFunction);'を使用し、 'aFunction'に' params.response'を使用します。 – Masiar

+0

私に聞こえる音。 –

+1

または、Webリクエストapiを使用して、ヘッダーを変更してonHeadersReceivedイベントでrequestIdを確認したときに、requestIdを記録できなかった場合。 – PAEz

1

私はDOMにスクリプトを注入することで、ウェブサイトで行われたすべてのHTTPリクエストとレスポンスをキャプチャ達成。私は、コンテンツのスクリプトを使用してDOMにinjected.jsを注入された:

/** 
* code in contentscript.js 
* added "web_accessible_resources": ["injected.js"] to manifest.json 
*/ 
var s = document.createElement('script'); 
s.src = chrome.extension.getURL('injected.js'); 
s.onload = function() { 
    this.remove(); 
}; 
(document.head || document.documentElement).appendChild(s); 

これはそのマッチ「content_scripts」(複数可)のウェブサイトにmanifest.jsonをで「マッチ」をinjected.jsを注入します。 contentscript.jsとinject.jsを "js"と記述してください。 また、manifest.jsonの「アクセス許可」にWebサイトが記載されていることを確認してください。アンサーの最後にあるmanifest.jsonを参照してください。

実際に要求と応答をキャプチャするinject.jsのコードは、How we captured AJAX requests from a website tab with a Chrome Extensionからインスピレーションを受けています。また、その記事のコメントのセクションを参照してください。次のように

injected.jsは次のとおりです。参考のため

(function(xhr) { 

    var XHR = XMLHttpRequest.prototype; 

    var open = XHR.open; 
    var send = XHR.send; 
    var setRequestHeader = XHR.setRequestHeader; 

    XHR.open = function(method, url) { 
     this._method = method; 
     this._url = url; 
     this._requestHeaders = {}; 
     this._startTime = (new Date()).toISOString(); 

     return open.apply(this, arguments); 
    }; 

    XHR.setRequestHeader = function(header, value) { 
     this._requestHeaders[header] = value; 
     return setRequestHeader.apply(this, arguments); 
    }; 

    XHR.send = function(postData) { 

     this.addEventListener('load', function() { 
      var endTime = (new Date()).toISOString(); 

      var myUrl = this._url ? this._url.toLowerCase() : this._url; 
      if(myUrl) { 

       if (postData) { 
        if (typeof postData === 'string') { 
         try { 
          // here you get the REQUEST HEADERS, in JSON format, so you can also use JSON.parse 
          this._requestHeaders = postData;  
         } catch(err) { 
          console.log('Request Header JSON decode failed, transfer_encoding field could be base64'); 
          console.log(err); 
         } 
        } else if (typeof postData === 'object' || typeof postData === 'array' || typeof postData === 'number' || typeof postData === 'boolean') { 
          // do something if you need 
        } 
       } 

       // here you get the RESPONSE HEADERS 
       var responseHeaders = this.getAllResponseHeaders(); 

       if (this.responseType != 'blob' && this.responseText) { 
        // responseText is string or null 
        try { 

         // here you get RESPONSE TEXT (BODY), in JSON format, so you can use JSON.parse 
         var arr = this.responseText; 

         // printing url, request headers, response headers, response body, to console 

         console.log(this._url); 
         console.log(JSON.parse(this._requestHeaders)); 
         console.log(responseHeaders); 
         console.log(JSON.parse(arr));       

        } catch(err) { 
         console.log("Error in responseType try catch"); 
         console.log(err); 
        } 
       } 

      } 
     }); 

     return send.apply(this, arguments); 
    }; 

})(XMLHttpRequest); 

、私のmanifest.jsonをは次のとおりです。

{ 
    "manifest_version": 2, 

    "name": "Extension Name", 
    "description": "Some Desc.", 
    "version": "1.1", 

    "browser_action": { 
    "default_icon": "icon.png", 
    "default_popup": "popup.html" 
    }, 
    "permissions": [ 
    "activeTab", 
    "storage", 
    "tabs", 
    "*://website.com/*" 
    ], 
    "content_scripts": [ 
    { 
     "matches": ["*://website.com/*"], 
     "run_at": "document_start", 
     "js": ["contentscript.js", "inject.js"] 
    } 
    ], 
    "web_accessible_resources": ["injected.js"] 
} 

この情報がお役に立てば幸いです。

関連する問題