精华内容
下载资源
问答
  • webRequest

    2016-08-28 23:40:00
    chrome.webRequest 描述: 使用chrome.webRequestAPI 监控与分析流量,还可以实时地拦截、阻止或修改请求。 可用版本: 从 Chrome 17开始支持。 权限: "webRequest"主机权限 清单...

    chrome.webRequest

    描述: 使用 chrome.webRequest API 监控与分析流量,还可以实时地拦截、阻止或修改请求。 
    可用版本: 从 Chrome 17 开始支持。 
    权限: "webRequest" 
    主机权限 

    清单文件

    要使用网络请求 API,您必须在应用的清单文件中声明 "webRequest" 权限,以及您需要访问网络请求的所有主机的主机权限。如果您需要以阻塞方式使用网络请求 API,您还需要另外请求 "webRequestBlocking" 权限。例如:

          {
            "name": "我的应用",
            ...
            "permissions": [
              "webRequest",
              "*://*.google.com/"
            ],
            ...
          }

    请求的生命周期

    网络请求 API 定义了一系列事件,在一次网络请求的生命周期内产生,您可以使用这些事件监控和分析流量。某些同步事件还允许您截获、阻止或者修改请求。

    对于成功请求的事件生命周期如下图所示,接下来是事件的定义: 
    Life cycle of a web request from the perspective of the webrequest API

     

    onBeforeRequest(可以为同步)
    当请求即将发出时产生。这一事件在 TCP 连接建立前发送,可以用来取消或重定向请求。
    onBeforeSendHeaders(可以为同步)
    当请求即将发出并且初始标头已经准备好时产生。这一事件是为了使应用能够添加、修改和删除请求标头(*)onBeforeSendHeaders 事件将传递给所有订阅者,所以不同的订阅者都可以尝试修改请求。有关具体如何处理的细节,请参见实现细节部分。这一事件可以用来取消请求。
    onSendHeaders
    当所有应用已经修改完请求标头并且展现最终(*)版本时产生。这一事件在标头发送至网络前触发,仅用于提供信息,并且以异步方式处理,不允许修改或取消请求。
    onHeadersReceived(可以为同步)
    每当接收到 HTTP(S) 响应标头时产生。由于重定向以及认证请求,对于每次请求这一事件可以多次产生。这一事件是为了使应用能够添加、修改和删除响应标头,例如传入的 Set-Cookie 标头。缓存指示是在该事件触发前处理的,所以修改 Cache-Control 之类的标头不会影响浏览器的缓存。它还允许您重定向请求。
    onAuthRequired(可以为同步)
    当请求需要用户认证时产生。这一事件可以同步处理,提供认证凭据。注意,应用提供的凭据可能无效,注意不要重复提供无效凭据,陷入无限循环。
    onBeforeRedirect
    当重定向即将执行时产生,重定向可以由 HTTP 响应代码或应用触发。这一事件仅用于提供信息,并以异步方式处理,不允许修改或取消请求。
    onResponseStarted
    当接收到响应正文的第一个字节时产生。对于 HTTP 请求,这意味着状态行和响应标头已经可用。这一事件仅用于提供信息,并以异步方式处理,不允许修改或取消请求。
    onCompleted
    当请求成功处理后产生。
    onErrorOccurred
    当请求不能成功处理时产生。

    网络请求 API 保证对于每一个请求,onCompleted 或 onErrorOccurred 是最终产生的事件,除了如下例外:如果请求重定向至 data:// URL,onBeforeRedirect 将是最后报告的事件。

     

    (*)注意网络请求 API 向应用展现的是网络栈的一种抽象。单个 URL 请求在内部可以分割为几个 HTTP 请求(例如从一个大文件获取单独的字节范围)或者可以不与网络通信就由网络栈处理。由于这一原因,这一 API 不会提供最终发送至网络的的 HTTP 标头。例如,所有与缓存相关的标头对应用都是不可见的。

    如下是当前不提供给 onBeforeSendHeaders 事件的标头列表,这一列表不保证是完整的或者不会变化:

    • Authorization
    • Cache-Control
    • Connection
    • Content-Length
    • Host
    • If-Modified-Since
    • If-None-Match
    • If-Range
    • Partial-Data
    • Pragma
    • Proxy-Authorization
    • Proxy-Connection
    • Transfer-Encoding

     

    只有应用具有相应的主机权限时,网络请求 API 才会暴露相关的请求。此外,只能访问下列协议的请求:http://https://ftp://file:// 或 chrome-extension://。 此外,某些请求的 URL 即使使用了以上某种协议也会被隐藏。例如,chrome-extension://other_extension_id,其中 other_extension_id不是处理该请求的应用标识符;还有 https://www.google.com/chrome 及其他(该列表并不完整)。此外来自您的应用的同步 XMLHttpRequest 将对阻塞的事件处理函数隐藏,以免产生死锁。注意,对于一些支持的协议,由于对应协议本身的性质,可以产生的事件会受到限制。例如,对于 file: 协议,只会产生onBeforeRequestonResponseStartedonCompleted 和 onErrorOccurred 事件。

    概念

    如以下几节所述,网络请求 API 的事件使用请求标识符,当您注册事件监听器时您还可以指定过滤器以及可选的额外信息。

    请求标识符

    每一个请求由请求标识符标识,这一标识符在浏览器会话以及应用的上下文中保证唯一,在请求的生命周期内保持不变,可以用来匹配同一请求的其他事件。注意在 HTTP 重定向或 HTTP 认证时,多个 HTTP 请求将映射至同一个网络请求。

    注册事件监听器

    要为网络请求注册事件处理函数,您使用通常 addListener() 函数的一种变形。除了指定回调函数,您还必须指定过滤器参数,另外您还可以指定一个可选的额外信息参数。

    网络请求API的 addListener() 三个参数定义如下:

          var callback = function(details) {...};
          var filter = {...};
          var opt_extraInfoSpec = [...];

    如下是监听 onBeforeRequest 事件的一个例子:

          chrome.webRequest.onBeforeRequest.addListener(
            callback, filter, opt_extraInfoSpec);

    每一个 addListener() 调用必须传递回调函数,作为第一个参数。将向这一回调函数传递包含当前 URL 请求详情的词典,词典中的信息取决于具体事件类型以及opt_extraInfoSpec 的内容。

    如果可选的 opt_extraInfoSpec 数组包含 'blocking' 字符串(仅允许用于特定事件),回调函数将以同步方式处理。这意味着请求将阻塞,直到回调函数返回。在这一种情况下,回调函数可以返回 webRequest.BlockingResponse 对象,确定这一请求进一步的生命周期。取决于当前上下文,这一响应允许取消或重定向某个请求(OnBeforeRequest),取消请求或修改标头(onBeforeSendHeaders),或者提供认证凭据(onAuthRequired)。

    webRequest.RequestFilter 类型的 filter 参数允许通过不同的方式限制为哪些请求产生事件:

    URLs
    URL 匹配表达式,例如 *://www.google.com/foo*bar
    类型
    请求类型,例如 "main_frame"(为顶层框架加载的文档)、"sub_frame"(为内嵌框架加载的文档)和 "image"(网站上的图片)。请参见webRequest.RequestFilter
    标签页标识符
    某个标签页的标识符。
    窗口标识符
    某个窗口的标识符。

     

    取决于事件类型,您可以在 opt_extraInfoSpec 中指定字符串,获取有关请求的附加信息。这样是为了仅在明确请求时才提供请求数据的有关详情。

    实现细节

    在开发使用网络请求API的应用时,理解如下几个实现细节是很重要的:

    冲突的解决

    在网络请求 API 的当前实现中,如果至少一个应用要求取消请求,则请求将被取消。如果一个应用取消了一个请求,所有应用都会收到 onErrorOccurred 事件的通知。一次只有一个应用允许重定向请求或者修改标头。如果多于一个应用尝试修改请求,最近安装的应用具有优先级,而忽略所有其他应用。如果应用修改或重定向的要求被忽略,也不会收到通知。

    缓存

    百度浏览器使用两种缓存:磁盘缓存和十分快速的内存缓存。内存缓存的生命周期与渲染器进程(大致与每个标签页对应)的生命周期相关,通过内存缓存响应的请求对网络请求API不可见。如果请求处理函数更改了它的行为(例如根据哪些请求被阻止而作出的行为),简单的页面刷新不一定能够体现这一更改的行为。要确保行为更改生效,请调用 handlerBehaviorChanged() 来清洗内存缓存。然而不要经常调用,清洗缓存是一项十分昂贵的操作。您不需要在注册或取消注册事件处理函数后调用 handlerBehaviorChanged()

    时间戳

    网络请求事件的 timeStamp 属性仅保证内部的一致性,将两个事件的时间相比较会得到它们之间正确的时间差,但是与应用内的当前时间(例如通过 (new Date()).getTime())比较则可能会导致不可预料的结果。

    错误处理

    如果您使用无效的参数注册事件,会引发 JavaScript 错误,事件处理程序也不会注册。如果事件处理的过程中产生错误,或者事件处理程序返回无效的 BlockingResponse 对象,应用的控制台中会记录错误消息,同时忽略对应请求的处理程序。

    示例

    如下例子演示如何阻止所有发送至 www.evil.com 的请求:

          chrome.webRequest.onBeforeRequest.addListener(
            function(details) {
              return {cancel: details.url.indexOf("://www.evil.com/") != -1};
            },
            {urls: ["<all_urls>"]},
            ["blocking"]);

    由于这一函数使用了阻塞事件处理函数,您将需要在清单文件中声明 "webRequest" 以及 "webRequestBlocking" 权限。

    以下例子通过另一种更高效的方式达到相同目的,因为不发送至 www.evil.com 的请求不必传递给应用:

          chrome.webRequest.onBeforeRequest.addListener(
            function(details) { return {cancel: true}; },
            {urls: ["*://www.evil.com/*"]},
            ["blocking"]);

    以下例子演示如何将所有请求中的 User-Agent 标头删除:

          chrome.webRequest.onBeforeSendHeaders.addListener(
            function(details) {
              for (var i = 0; i < details.requestHeaders.length; ++i) {
                if (details.requestHeaders[i].name === 'User-Agent') {
                  details.requestHeaders.splice(i, 1);
                  break;
                }
              }
              return {requestHeaders: details.requestHeaders};
            },
            {urls: ["<all_urls>"]},
            ["blocking", "requestHeaders"]);

    摘要

    类型
    RequestFilter
    HttpHeaders
    BlockingResponse
    UploadData
    属性
    MAX_HANDLER_BEHAVIOR_CHANGED_CALLS_PER_10_MINUTES
    方法
    handlerBehaviorChanged − chrome.webRequest.handlerBehaviorChanged(function callback)
    事件
    onBeforeRequest
    onBeforeSendHeaders
    onSendHeaders
    onHeadersReceived
    onAuthRequired
    onResponseStarted
    onBeforeRedirect
    onCompleted
    onErrorOccurred

    类型

    RequestFilter

    描述应用于网络请求事件的过滤器对象。
    属性
    array of string urls

    URL 或 URL 匹配表达式列表,不匹配任何 URL 的请求会被过滤出去。

    array of enum of "main_frame""sub_frame""stylesheet""script""image","object""xmlhttprequest", or "other" (可选)
    types

    请求类型的列表,不匹配任何一种类型的请求会被过滤出去。

    integer (可选)
    tabId
     
    integer (可选)
    windowId
     

    HttpHeaders

    array of object包含 HTTP 标头的数组,每一项标头都通过词典表示,包含 name 属性,以及 value 或 binaryValue 中的某一属性。

    BlockingResponse

    用于在 extraInfoSpec 参数中指定 "blocking" 的事件处理函数的返回值,允许事件处理函数修改网络请求。
    属性
    boolean (可选)
    cancel

    如果为 true,则取消请求。在 onBeforeRequest 事件中使用,用来阻止请求的发送。

    string (可选)
    redirectUrl

    仅用于 onBeforeRequest 和 onHeadersReceived 事件的返回值。如果设置了该属性,就会阻止原始请求的发送/完成,并重定向至指定的 URL。允许重定向至非 HTTP 协议的 URL,例如 data:。重定向操作产生的重定向通常使用原来的请求方法,以下情况例外:如果在 onHeadersReceived 阶段产生了重定向,重定向请求将使用 GET 方法发出。

    HttpHeaders (可选)
    requestHeaders

    仅用于 onBeforeSendHeaders 事件的返回值。如果设置了这一属性,请求将改用这些标头发出。

    HttpHeaders (可选)
    responseHeaders

    仅用于 onHeadersReceived 事件的返回值。如果设置了这一属性,则假定服务器返回了这些响应标头。为了限制冲突数目(对于每一个请求,只有一个应用可以修改 responseHeaders),只有有当您确实需要修改标头时才应该返回 responseHeaders

    object (可选)
    authCredentials

    仅用于 onAuthRequired 事件的返回值。如果设置了这一属性,发出的请求将使用提供的凭据。

    string username  
    string password  

    UploadData

    从 Chrome 23 开始支持。

    包含 URL 请求中上传的数据。
    属性
    any (可选)
    bytes

    包含数据的一份拷贝的 ArrayBuffer。

    string (可选)
    file

    包含文件路径与名称的字符串。

    属性

    20 chrome.webRequest.MAX_HANDLER_BEHAVIOR_CHANGED_CALLS_PER_10_MINUTES

    从 Chrome 23 开始支持。

    10 分钟内 handlerBehaviorChanged 能够被调用的次数。handlerBehaviorChanged 是一个昂贵的函数,不应该经常调用。

    方法

    handlerBehaviorChanged

    chrome.webRequest.handlerBehaviorChanged(function callback)

    当网络请求处理函数的行为发生更改时,为了避免缓存导致的不正确处理,需要调用这一函数。这一函数调用比较昂贵,不要经常调用。

    参数
    function (可选)
    callback

    如果您指定了 callback 参数,它应该是一个如下形式的函数:

    function() {...};

    事件

    onBeforeRequest

    当请求即将发生时产生。

    addListener

    chrome.webRequest.onBeforeRequest.addListener(function callback, )
    参数
    function callback

    callback 参数应该是一个如下形式的函数:

    function(object details) {...};
    object details
    string requestId

    请求标识符。请求标识符在浏览器会话中保证唯一,所以,它们可以用来联系同一请求的不同事件。

    string url  
    string method

    标准 HTTP 方法。

    integer frameId

    0 表示请求发生在主框架中,正数表示发出请求的子框架标识符。如果加载了(子)框架的文档(type 为 "main_frame" 或"sub_frame"),frameId 指定该框架的标识符,而不是外层框架的标识符。框架标识符在标签页中保证唯一。

    integer parentFrameId

    包含发送请求框架的框架(即父框架)标识符,如果不存在父框架则为 -1。

    object (可选)
    requestBody

    从 Chrome 23 开始支持。

    包含 HTTP 请求正文数据,仅在 extraInfoSpec 包含 "requestBody" 时才会提供。

    string (可选)
    error

    获取请求正文数据时发生的错误。

    object (可选)
    formData

    如果请求方法为 POST,并且正文为经过 UTF-8 编码的键/值对序列,或者是以 multipart/form-data 或 application/x-www-form-urlencoded 的形式编码,该词典存在,每一个键包含了对应键的所有值的列表。如果数据为另一种媒体类型或者是以错误的形式存在,该词典就不存在。该词典的值的一个例子为:{'key': ['value1', 'value2']}。

    array ofUploadData (可选)
    raw

    如果请求方法为 PUT 或 POST,并且正文没有经过分析后放在 formData 中,那么未分析的请求正文元素将包含在该数组中。

    integer tabId

    产生请求的标签页标识符。如果请求与标签页无关则为 -1。

    enum of"main_frame","sub_frame","stylesheet","script""image","object","xmlhttprequest", or "other" type

    请求的资源将如何使用。

    double timeStamp

    该信号触发的时间,以 1970 年 1 月 1 日午夜开始所经过的毫秒数表示。

    监听器返回值

    BlockingResponse )
    如果“extraInfoSpec”参数指定了 "blocking",事件监听器应该返回该类型的对象。

    onBeforeSendHeaders

    在发送 HTTP 请求前,一旦请求标头可用就产生这一事件。这一事件可能在与服务器的 TCP 连接建立后产生,但是确保在发送任何 HTTP 数据前产生。

    addListener

    chrome.webRequest.onBeforeSendHeaders.addListener(function callback, )
    参数
    function callback

    callback 参数应该是一个如下形式的函数:

    function(object details) {...};
    object details
    string requestId

    请求标识符。请求标识符在浏览器会话中保证唯一,所以,它们可以用来联系同一请求的不同事件。

    string url  
    string method

    标准 HTTP 方法。

    integer frameId

    0 表示请求发生在主框架中,正数表示发出请求的子框架标识符。如果加载了(子)框架的文档(type 为"main_frame" 或"sub_frame"),frameId 指定该框架的标识符,而不是外层框架的标识符。框架标识符在标签页中保证唯一。

    integer parentFrameId

    包含发送请求框架的框架(即父框架)标识符,如果不存在父框架则为 -1。

    integer tabId

    产生请求的标签页标识符。如果请求与标签页无关则为 -1。

    enum of "main_frame","sub_frame","stylesheet""script","image""object","xmlhttprequest", or"other" type

    请求的资源将如何使用。

    double timeStamp

    该信号触发的时间,以 1970 年 1 月 1 日午夜开始所经过的毫秒数表示。

    HttpHeaders (可选)
    requestHeaders

    将要与这一请求一同发送的 HTTP 请求标头。

    监听器返回值

    BlockingResponse )
    如果“extraInfoSpec”参数指定了 "blocking",事件监听器应该返回该类型的对象。

    onSendHeaders

    当请求即将发送至服务器的前一刻产生(前面 onBeforeSendHeaders 事件处理函数作出的修改可以在这一事件产生时体现)。

    addListener

    chrome.webRequest.onSendHeaders.addListener(function callback, )
    参数
    function callback

    callback 参数应该是一个如下形式的函数:

    function(object details) {...};
    object details
    string requestId

    请求标识符。请求标识符在浏览器会话中保证唯一,所以,它们可以用来联系同一请求的不同事件。

    string url  
    string method

    标准 HTTP 方法。

    integer frameId

    0 表示请求发生在主框架中,正数表示发出请求的子框架标识符。如果加载了(子)框架的文档(type 为"main_frame" 或"sub_frame"),frameId 指定该框架的标识符,而不是外层框架的标识符。框架标识符在标签页中保证唯一。

    integer parentFrameId

    包含发送请求框架的框架(即父框架)标识符,如果不存在父框架则为 -1。

    integer tabId

    产生请求的标签页标识符。如果请求与标签页无关则为 -1。

    enum of "main_frame","sub_frame","stylesheet""script","image""object","xmlhttprequest", or"other" type

    请求的资源将如何使用。

    double timeStamp

    该信号触发的时间,以 1970 年 1 月 1 日午夜开始所经过的毫秒数表示。

    HttpHeaders (可选)
    requestHeaders

    已经与这一请求一起发送的HTTP请求标头。

    onHeadersReceived

    当接收到 HTTP 响应标头时产生。

    addListener

    chrome.webRequest.onHeadersReceived.addListener(function callback, )
    参数
    function callback

    callback 参数应该是一个如下形式的函数:

    function(object details) {...};
    object details

    从 Chrome 31 开始支持。

    string requestId

    请求标识符。请求标识符在浏览器会话中保证唯一,所以,它们可以用来联系同一请求的不同事件。

    string url  
    string method

    标准 HTTP 方法。

    integer frameId

    0 表示请求发生在主框架中,正数表示发出请求的子框架标识符。如果加载了(子)框架的文档(type 为"main_frame" 或"sub_frame"),frameId 指定该框架的标识符,而不是外层框架的标识符。框架标识符在标签页中保证唯一。

    integer parentFrameId

    包含发送请求框架的框架(即父框架)标识符,如果不存在父框架则为 -1。

    integer tabId

    产生请求的标签页标识符。如果请求与标签页无关则为 -1。

    enum of "main_frame","sub_frame","stylesheet""script","image""object","xmlhttprequest", or"other" type

    请求的资源将如何使用。

    double timeStamp

    该信号触发的时间,以 1970 年 1 月 1 日午夜开始所经过的毫秒数表示。

    string statusLine

    响应的 HTTP 状态行,如果是 HTTP/0.9 响应(即没有状态行的响应)则为 'HTTP/0.9 200 OK' 字符串。

    HttpHeaders (可选)
    responseHeaders

    与响应一起接收到的 HTTP 响应标头。

    监听器返回值

    BlockingResponse )
    如果“extraInfoSpec”参数指定了 "blocking",事件监听器应该返回该类型的对象。

    onAuthRequired

    当接收到认证失败时产生。事件处理函数有三种选择:提供认证凭据,取消请求并显示错误页面,或者不采取任何行动。如果提供了错误的用户凭据,可能会为同一请求重复调用事件处理函数。

    addListener

    chrome.webRequest.onAuthRequired.addListener(function callback, )
    参数
    function callback

    callback 参数应该是一个如下形式的函数:

    function(object details, function callback) {...};
    object details
    string requestId

    请求标识符。请求标识符在浏览器会话中保证唯一,所以,它们可以用来联系同一请求的不同事件。

    string url  
    string method

    标准 HTTP 方法。

    integer frameId

    0 表示请求发生在主框架中,正数表示发出请求的子框架标识符。如果加载了(子)框架的文档(type 为"main_frame" 或"sub_frame"),frameId 指定该框架的标识符,而不是外层框架的标识符。框架标识符在标签页中保证唯一。

    integer parentFrameId

    包含发送请求框架的框架(即父框架)标识符,如果不存在父框架则为 -1。

    integer tabId

    产生请求的标签页标识符。如果请求与标签页无关则为 -1。

    enum of "main_frame","sub_frame","stylesheet","script""image","object","xmlhttprequest", or"other" type

    请求的资源将如何使用。

    double timeStamp

    该信号触发的时间,以 1970 年 1 月 1 日午夜开始所经过的毫秒数表示。

    string scheme

    认证方式,例如基本("basic")或摘要式("digest")。

    string (可选)
    realm

    服务器提供的认证域(如果有的话)。

    object challenger

    请求认证的服务器。

    string host  
    integer port  
    boolean isProxy

    如果为 Proxy-Authenticate(代理服务器认证)则为 true,否则如果为 WWW-Authenticate 则为 false。

    HttpHeaders (可选)
    responseHeaders

    与响应一起接收到的 HTTP 响应标头。

    string statusLine

    响应的 HTTP 状态行,如果是 HTTP/0.9 响应(即没有状态行的响应)则为 'HTTP/0.9 200 OK' 字符串。

    function (可选)
    callback

    如果“extraInfoSpec”参数指定了 "asyncBlocking",事件监听器应该调用该函数,提供处理事件的结果。

    如果您指定了 callback 参数,它应该是一个如下形式的函数:

    function( BlockingResponse response) {...};
    BlockingResponse response

    事件处理的结果:可以设置 authCredentials 属性,提供认证凭据;也可以将 cancel 属性设置为 true,取消请求并显示错误页面;或者不设置任何属性,不采取任何行动。

    监听器返回值

    BlockingResponse )
    如果“extraInfoSpec”参数指定了 "blocking",事件监听器应该返回该类型的对象。

    onResponseStarted

    当响应正文的第一个字节接收到时产生。对于 HTTP 请求,这意味着状态行及请求标头已经可用。

    addListener

    chrome.webRequest.onResponseStarted.addListener(function callback, )
    参数
    function callback

    callback 参数应该是一个如下形式的函数:

    function(object details) {...};
    object details
    string requestId

    请求标识符。请求标识符在浏览器会话中保证唯一,所以,它们可以用来联系同一请求的不同事件。

    string url  
    string method

    标准 HTTP 方法。

    integer frameId

    0 表示请求发生在主框架中,正数表示发出请求的子框架标识符。如果加载了(子)框架的文档(type 为"main_frame" 或"sub_frame"),frameId 指定该框架的标识符,而不是外层框架的标识符。框架标识符在标签页中保证唯一。

    integer parentFrameId

    包含发送请求框架的框架(即父框架)标识符,如果不存在父框架则为 -1。

    integer tabId

    产生请求的标签页标识符。如果请求与标签页无关则为 -1。

    enum of "main_frame","sub_frame","stylesheet""script","image""object","xmlhttprequest", or"other" type

    请求的资源将如何使用。

    double timeStamp

    该信号触发的时间,以 1970 年 1 月 1 日午夜开始所经过的毫秒数表示。

    string (可选)
    ip

    服务器 IP 地址,注意这可能是一个字面的 IPv6 地址。

    boolean fromCache

    表示响应是否从磁盘缓存中获取。

    integer statusCode

    服务器返回的标准 HTTP 状态代码。

    HttpHeaders (可选)
    responseHeaders

    与响应一起接收到的 HTTP 响应标头。

    string statusLine

    响应的 HTTP 状态行,如果是 HTTP/0.9 响应(即没有状态行的响应)则为 'HTTP/0.9 200 OK' 字符串。

    onBeforeRedirect

    当服务器产生的重定向即将进行时产生。

    addListener

    chrome.webRequest.onBeforeRedirect.addListener(function callback, )
    参数
    function callback

    callback 参数应该是一个如下形式的函数:

    function(object details) {...};
    object details
    string requestId

    请求标识符。请求标识符在浏览器会话中保证唯一,所以,它们可以用来联系同一请求的不同事件。

    string url  
    string method

    标准 HTTP 方法。

    integer frameId

    0 表示请求发生在主框架中,正数表示发出请求的子框架标识符。如果加载了(子)框架的文档(type 为"main_frame" 或"sub_frame"),frameId 指定该框架的标识符,而不是外层框架的标识符。框架标识符在标签页中保证唯一。

    integer parentFrameId

    包含发送请求框架的框架(即父框架)标识符,如果不存在父框架则为 -1。

    integer tabId

    产生请求的标签页标识符。如果请求与标签页无关则为 -1。

    enum of "main_frame","sub_frame","stylesheet""script","image""object","xmlhttprequest", or"other" type

    请求的资源将如何使用。

    double timeStamp

    该信号触发的时间,以 1970 年 1 月 1 日午夜开始所经过的毫秒数表示。

    string (可选)
    ip

    服务器 IP 地址,注意这可能是一个字面的 IPv6 地址。

    boolean fromCache

    表示响应是否从磁盘缓存中获取。

    integer statusCode

    服务器返回的标准 HTTP 状态代码。

    string redirectUrl

    新的 URL。

    HttpHeaders (可选)
    responseHeaders

    与响应一起接收到的 HTTP 响应标头。

    string statusLine

    响应的 HTTP 状态行,如果是 HTTP/0.9 响应(即没有状态行的响应)则为 'HTTP/0.9 200 OK' 字符串。

    onCompleted

    当请求完成时产生。

    addListener

    chrome.webRequest.onCompleted.addListener(function callback, )
    参数
    function callback

    callback 参数应该是一个如下形式的函数:

    function(object details) {...};
    object details
    string requestId

    请求标识符。请求标识符在浏览器会话中保证唯一,所以,它们可以用来联系同一请求的不同事件。

    string url  
    string method

    标准 HTTP 方法。

    integer frameId

    0 表示请求发生在主框架中,正数表示发出请求的子框架标识符。如果加载了(子)框架的文档(type 为"main_frame" 或"sub_frame"),frameId 指定该框架的标识符,而不是外层框架的标识符。框架标识符在标签页中保证唯一。

    integer parentFrameId

    包含发送请求框架的框架(即父框架)标识符,如果不存在父框架则为 -1。

    integer tabId

    产生请求的标签页标识符。如果请求与标签页无关则为 -1。

    enum of "main_frame","sub_frame","stylesheet""script","image""object","xmlhttprequest", or"other" type

    请求的资源将如何使用。

    double timeStamp

    该信号触发的时间,以 1970 年 1 月 1 日午夜开始所经过的毫秒数表示。

    string (可选)
    ip

    服务器 IP 地址,注意这可能是一个字面的 IPv6 地址。

    boolean fromCache

    表示响应是否从磁盘缓存中获取。

    integer statusCode

    服务器返回的标准 HTTP 状态代码。

    HttpHeaders (可选)
    responseHeaders

    与响应一起接收到的 HTTP 响应标头。

    string statusLine

    响应的 HTTP 状态行,如果是 HTTP/0.9 响应(即没有状态行的响应)则为 'HTTP/0.9 200 OK' 字符串。

    onErrorOccurred

    当错误发生时产生。

    addListener

    chrome.webRequest.onErrorOccurred.addListener(function callback, )
    参数
    function callback

    callback 参数应该是一个如下形式的函数:

    function(object details) {...};
    object details
    string requestId

    请求标识符。请求标识符在浏览器会话中保证唯一,所以,它们可以用来联系同一请求的不同事件。

    string url  
    string method

    标准 HTTP 方法。

    integer frameId

    0 表示请求发生在主框架中,正数表示发出请求的子框架标识符。如果加载了(子)框架的文档(type 为"main_frame" 或"sub_frame"),frameId 指定该框架的标识符,而不是外层框架的标识符。框架标识符在标签页中保证唯一。

    integer parentFrameId

    包含发送请求框架的框架(即父框架)标识符,如果不存在父框架则为 -1。

    integer tabId

    产生请求的标签页标识符。如果请求与标签页无关则为 -1。

    enum of "main_frame","sub_frame","stylesheet""script","image""object","xmlhttprequest", or"other" type

    请求的资源将如何使用。

    double timeStamp

    该信号触发的时间,以 1970 年 1 月 1 日午夜开始所经过的毫秒数表示。

    string (可选)
    ip

    服务器 IP 地址,注意这可能是一个字面的 IPv6 地址。

    boolean fromCache

    表示响应是否从磁盘缓存中获取。

    string error

    错误描述。这一字符串不保证在不同的版本间保持向后兼容,您决不能分析它的内容并由此作出处理。

     

    转载于:https://www.cnblogs.com/developer-ios/p/5816381.html

    展开全文
  • WebRequest

    2015-07-08 11:53:36
    《》 // 待请求的地址 ...// 创建 WebRequest 对象,WebRequest 是抽象类,定义了请求的规定, // 可以用于各种请求,例如:Http, Ftp 等等。 // HttpWebRequest 是 WebRequest 的派生类,专门用于 Http System

    <>

    ----------------------------------------------HttpWebRequest

    // 待请求的地址
    
    string url = "http://www.cnblogs.com";
    
                 
    
    // 创建 WebRequest 对象,WebRequest 是抽象类,定义了请求的规定,
    
    // 可以用于各种请求,例如:Http, Ftp 等等。
    
    // HttpWebRequest 是 WebRequest 的派生类,专门用于 Http
    
    System.Net.HttpWebRequest request = System.Net.HttpWebRequest.Create(url) as System.Net.HttpWebRequest;
    
     
    
    // 请求的方式通过 Method 属性设置 ,默认为 GET
    
    // 可以将 Method 属性设置为任何 HTTP 1.1 协议谓词:GET、HEAD、POST、PUT、DELETE、TRACE 或 OPTIONS。
    
    request.Method = "POST";
    
     
    
    // 还可以在请求中附带 Cookie
    
    // 但是,必须首先创建 Cookie 容器
    
    request.CookieContainer = new System.Net.CookieContainer();
    
     
    
    System.Net.Cookie requestCookie = new System.Net.Cookie("Request", "RequestValue","/", "localhost");
    
    request.CookieContainer.Add(requestCookie);
    
    Console.WriteLine("请输入请求参数:");
    
     
    
    // 输入 POST 的数据.
    
    string inputData = Console.ReadLine();
    
     
    
    // 拼接成请求参数串,并进行编码,成为字节
    
    string postData = "firstone=" + inputData;
    
    ASCIIEncoding encoding = new ASCIIEncoding();
    
    byte[] byte1 = encoding.GetBytes(postData);
    
     
    
    // 设置请求的参数形式
    
    request.ContentType = "application/x-www-form-urlencoded";
    
     
    
    // 设置请求参数的长度.
    
    request.ContentLength = byte1.Length;
    
     
    
    // 取得发向服务器的流
    
    System.IO.Stream newStream = request.GetRequestStream();
    
     
    
    // 使用 POST 方法请求的时候,实际的参数通过请求的 Body 部分以流的形式传送
    
    newStream.Write(byte1, 0, byte1.Length);
    
     
    
    // 完成后,关闭请求流.
    
    newStream.Close();
    
     
    
    // GetResponse 方法才真的发送请求,等待服务器返回
    
    System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse();
    
     
    // 首先得到回应的头部,可以知道返回内容的长度或者类型
    
    Console.WriteLine("Content length is {0}", response.ContentLength);
    
    Console.WriteLine("Content type is {0}", response.ContentType);
    
     
    
    // 回应的 Cookie 在 Cookie 容器中
    
    foreach (System.Net.Cookie cookie in response.Cookies)
    
    {
    
        Console.WriteLine("Name: {0}, Value: {1}", cookie.Name, cookie.Value);
    
    }
    
    Console.WriteLine();
    
     
    
    // 然后可以得到以流的形式表示的回应内容
    
    System.IO.Stream receiveStream = response.GetResponseStream();     
    
     
    
    // 还可以将字节流包装为高级的字符流,以便于读取文本内容 
    
    // 需要注意编码
    
    System.IO.StreamReader readStream = new System.IO.StreamReader(receiveStream, Encoding.UTF8);
    
     
    
    Console.WriteLine("Response stream received.");
    
    Console.WriteLine(readStream.ReadToEnd());
    
     
    
    // 完成后要关闭字符流,字符流底层的字节流将会自动关闭
    
    response.Close();
    
    readStream.Close();

    --------------------------------------------------WebRequst

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    namespace ClientAspApi
    {
        using ClientAspApi.Models;
        using System.IO;
        using System.Net;
        public partial class WebForm1 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                //1.0使用C#代码模拟浏览器进行URL的请求得到响应数据
                WebRequest request = WebRequest.Create("http://localhost:59869/api/Menus/GetMeun");
                request.Method = "Get";
    
                //2.0将请求报文发送给服务器,同时拿到服务器的响应报文
                WebResponse response = request.GetResponse();
    
                //3.0提取服务器响应报文中的数据(服务端返回的数据是以流的形式返回的)
                System.IO.Stream stream = response.GetResponseStream();
    
                //3.1将服务端返回的数据流转换成一个字符串
                string responseTxt = string.Empty;
                using (StreamReader sr = new StreamReader(stream))
                {
                    responseTxt = sr.ReadToEnd();
                }
    	    //将responseTex这个Json格式的字符串反序列化成一个List<MenuInfo>的泛型对象
                List<MenuInfo> obj = Jil.JSON.Deserialize<List<MenuInfo>>(responseTxt);
    
                GridView1.DataSource = obj; //将这个泛型对象绑定到GridView1这个控件上。显示数据
                GridView1.DataBind();
            }
        }
    }


    展开全文
  • CHROME扩展笔记之webRequest·图片拦截

    万次阅读 2021-02-24 15:28:00
    使用webRequest首先需要在manifest权限里声明,[“webRequest”,“webRequestBlocking”,"以及监控的地址,如监控所有则:*: //*/* "] //插件监听拦截-图片 chrome.webRequest.onBeforeRequest.addListener ( ...

    使用webRequest首先需要在manifest权限里声明,[“webRequest”,“webRequestBlocking”,"以及监控的地址,如监控所有则:*: //*/* "]

    //插件监听拦截-图片
    chrome.webRequest.onBeforeRequest.addListener (
    	function(details) {
    		// console.log(details);
    		// 回调返回一个对象,如果对象里得cancel为true则会拦截不继续请求
    		return {cancel: true};
    	},
    	//监听页面请求,你也可以通过*来匹配。urls地址,types请求资源类型
    	{urls:["*://*.baidu.com/*","*://*.bdstatic.com/*"], types: ["image"]},
        ["blocking"] 
    );
    
    展开全文
  • UnityWebRequest

    2020-12-26 14:37:20
    <p>This pull request removes dependency on the <code>WWW</code> library in favor of <code>UnityWebRequest</code>. An option to disable SSL verification was added for compatibility with IBM Cloud ...
  • WebRequest使用

    2019-09-28 01:02:28
    // 待请求的地址 ...// 创建 WebRequest 对象,WebRequest 是抽象类,定义了请求的规定, // 可以用于各种请求,例如:Http, Ftp 等等。 // HttpWebRequest 是 WebRequest 的派生类,专门用于 Http Sys...
    // 待请求的地址
    string url = "http://www.cnblogs.com";
                 
    // 创建 WebRequest 对象,WebRequest 是抽象类,定义了请求的规定,
    // 可以用于各种请求,例如:Http, Ftp 等等。
    // HttpWebRequest 是 WebRequest 的派生类,专门用于 Http
    System.Net.HttpWebRequest request
        = System.Net.HttpWebRequest.Create(url) as System.Net.HttpWebRequest;
     
    // 请求的方式通过 Method 属性设置 ,默认为 GET
    // 可以将 Method 属性设置为任何 HTTP 1.1 协议谓词:GET、HEAD、POST、PUT、DELETE、TRACE 或 OPTIONS。
    request.Method = "POST";
     
    // 还可以在请求中附带 Cookie
    // 但是,必须首先创建 Cookie 容器
    request.CookieContainer = new System.Net.CookieContainer();
     
    System.Net.Cookie requestCookie
        = new System.Net.Cookie("Request", "RequestValue","/", "localhost");
    request.CookieContainer.Add(requestCookie);
     
    Console.WriteLine("请输入请求参数:");
     
    // 输入 POST 的数据.
    string inputData = Console.ReadLine();
     
    // 拼接成请求参数串,并进行编码,成为字节
    string postData = "firstone=" + inputData;
    ASCIIEncoding encoding = new ASCIIEncoding();
    byte[] byte1 = encoding.GetBytes(postData);
     
    // 设置请求的参数形式
    request.ContentType = "application/x-www-form-urlencoded";
     
    // 设置请求参数的长度.
    request.ContentLength = byte1.Length;
     
    // 取得发向服务器的流
    System.IO.Stream newStream = request.GetRequestStream();
     
    // 使用 POST 方法请求的时候,实际的参数通过请求的 Body 部分以流的形式传送
    newStream.Write(byte1, 0, byte1.Length);
     
    // 完成后,关闭请求流.
    newStream.Close();
     
    // GetResponse 方法才真的发送请求,等待服务器返回
    System.Net.HttpWebResponse response
        = (System.Net.HttpWebResponse)request.GetResponse();
     
    // 首先得到回应的头部,可以知道返回内容的长度或者类型
    Console.WriteLine("Content length is {0}", response.ContentLength);
    Console.WriteLine("Content type is {0}", response.ContentType);
     
    // 回应的 Cookie 在 Cookie 容器中
    foreach (System.Net.Cookie cookie in response.Cookies)
    {
        Console.WriteLine("Name: {0}, Value: {1}", cookie.Name, cookie.Value);
    }
    Console.WriteLine();
     
    // 然后可以得到以流的形式表示的回应内容
    System.IO.Stream receiveStream
        = response.GetResponseStream();    
     
    // 还可以将字节流包装为高级的字符流,以便于读取文本内容
    // 需要注意编码
    System.IO.StreamReader readStream
        = new System.IO.StreamReader(receiveStream, Encoding.UTF8);
     
    Console.WriteLine("Response stream received.");
    Console.WriteLine(readStream.ReadToEnd());
     
    // 完成后要关闭字符流,字符流底层的字节流将会自动关闭
    response.Close();
    readStream.Close();

    使用WebRequest对象调用新浪天气预报

        public string GetWeather(string city)
        {
            string weatherHtml = string.Empty;
            //转换输入参数的编码类型
            string cityInfo = HttpUtility.UrlEncode(city,System.Text.UnicodeEncoding.GetEncoding("GB2312"));
            //初始化新的webRequst
            HttpWebRequest weatherRequest = (HttpWebRequest)WebRequest.Create("http://php.weather.sina.com.cn/search.php?city="+cityInfo);
            
            HttpWebResponse weatherResponse = (HttpWebResponse)weatherRequest.GetResponse();
            //从Internet资源返回数据流
            Stream weatherStream = weatherResponse.GetResponseStream();
            //读取数据流
            StreamReader weatherStreamReader = new StreamReader(weatherStream,System.Text.Encoding.Default);
            //读取数据
            weatherHtml = weatherStreamReader.ReadToEnd();
            weatherStreamReader.Close();
            weatherStream.Close();
            weatherResponse.Close();
            //针对不同的网站查看html源文件
            return weatherHtml;
        }

     

    转载于:https://www.cnblogs.com/grayworm/p/4865681.html

    展开全文
  • webRequest封装

    2019-02-19 10:03:00
    from requests.models import Response import requests import random import time ...class WebRequest(object): def __init__(self, *args, **kwargs): pass @property def use...
  • WebRequest for native

    2021-01-06 03:42:49
    s the initial round for PRs for WebRequest. It doesn't have Emscripten, yet, but that should come shortly after upload support, which may already work, but I haven't tested it as thoroughly as...
  • WebRequest, WebResponse

    2020-12-09 04:04:26
    <div><p>I tried to fetch html by using WebRequest class and i got a WebResponse through a GeckoWebExecutor object. And then i converted the WebResponse object to a string object. And then i loaded the...
  • UnityWebRequest通信

    2021-04-02 11:30:24
    //获取排行榜玩家,空参数 public static IEnumerator PostRequestGetRankPlayers() { ... string url = urlQA + "/user/rank"; //空参数 WWWForm form = new ... UnityWebRequest request = UnityWebRequest.Post(ur.
  • UnityWebRequest封装

    2020-04-01 17:35:01
    /*** * * Title: MXFramework * 主题: UnityWebRequest工具 * Description: * 功能:1.UnityWebRequest常用的API进行封装 * * Date: 2020 * Version: v4.0版本 * Modify Recoder: ...
  • <div><p>Move from using WWW to UnityWebRequest for REST calls. <ul><li>[x] Remove all WWW and use UnityWebRequest</li>[x] Implement PUT method</li><li>[x] Transition DELETE to UnityWebRequest</li><li>...
  • C# WebRequest

    2015-05-05 08:58:05
    WebRequest 是 .NET Framework 的请求/响应模型的 abstract 基类,用于访问 Internet 数据。 使用该请求/响应模型的应用程序可以用协议不可知的方式从 Internet 请求数据,在这种方式下,应用程序处理 WebRequest...
  • chrome.webRequest

    2018-06-28 13:34:00
    chrome.webRequest 描述: 使用 chrome.webRequest API 监控与分析流量,还可以实时地拦截、阻止或修改请求。  可用版本: 从 Chrome 17 开始支持。  权限: "webRequest" 主机权限  ...
  • UnityWebRequest下载文件

    千次阅读 2020-02-29 23:29:19
    UnityWebRequest header = UnityWebRequest.Head(o.previewUrl); yield return header.SendWebRequest(); 下载请求 UnityWebRequest request = UnityWebRequest.Get(o.previewUrl); yield return request.SendWe...
  • UnityWebRequest AsObservable

    2021-01-11 23:40:12
    <div><p>http://docs.unity3d.com/ScriptReference/Experimental.Networking.UnityWebRequest.html</p><p>该提问来源于开源项目:neuecc/UniRx</p></div>
  • UnityWebRequest使用方法

    2021-05-07 19:24:32
    一:Unity网络工具类: ...UnityWebRequest包含多个静态方法,可以创建一个UnityWebRequest对象,调用SendWebRequest正式发送请求。在协程返回结果后,需要判断是否有错误,再做处理。 IEnumerator GetText()
  • UnityWebRequest request = UnityWebRequestAssetBundle.GetAssetBundle(uri);yield return request.SendWebRequest();//AssetBundle ab = DownloadHandlerAssetBundle.GetContent(request);AssetBun...
  • msdn的解释是:将WebRequest子代注册到服务请求,很短,很抽象,不够白话,如果你一开始就理解这句话的意思,那我只能说你的智商很高,技术也很好。 我先不说RegisterPrefix是什么意思,先看下我碰到的问题。 在http...
  • UnityWebRequest 简单资源下载 支持断点续传,下载进度,下载速度(每秒) 使用方法:开启一个协程,调用DownLoadFile即可, 需要传入3个Action,分别时下载进度,下载文件与当前文件总大小进度,和下载速度

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,995
精华内容 1,998
关键字:

webrequest