<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 11.5.?設置 `User-Agent` 改善你的 HTTP web 服務客戶端的第一步就是用 `User-Agent` 適當地鑒別你自己。為了做到這一點,你需要遠離基本的 `urllib` 而深入到 `urllib2`。 ## 例?11.4.?`urllib2` 介紹 ``` >>> import httplib >>> httplib.HTTPConnection.debuglevel = 1 >>> import urllib2 >>> request = urllib2.Request('http://diveintomark.org/xml/atom.xml') >>> opener = urllib2.build_opener() >>> feeddata = opener.open(request).read() connect: (diveintomark.org, 80) send: ' GET /xml/atom.xml HTTP/1.0 Host: diveintomark.org User-agent: Python-urllib/2.1 ' reply: 'HTTP/1.1 200 OK\r\n' header: Date: Wed, 14 Apr 2004 23:23:12 GMT header: Server: Apache/2.0.49 (Debian GNU/Linux) header: Content-Type: application/atom+xml header: Last-Modified: Wed, 14 Apr 2004 22:14:38 GMT header: ETag: "e8284-68e0-4de30f80" header: Accept-Ranges: bytes header: Content-Length: 26848 header: Connection: close ``` | | | | --- | --- | | \[1\] | 如果你的 Python IDE 仍舊為上一節的例子而打開著,你可以略過這一步,在開啟 [HTTP 調試](debugging.html "11.4.?調試 HTTP web 服務")時你能看到網絡線路上的實際傳輸過程。 | | \[2\] | 使用 `urllib2` 獲取 HTTP 資源包括三個處理步驟,這會有助于你理解這一過程。 第一步是創建 `Request` 對象,它接受一個你最終想要獲取資源的 URL。注意這一步實際上還不能獲取任何東西。 | | \[3\] | 第二步是創建一個 URL 開啟器 (opener)。它可以接受任何數量的處理器來控制響應的處理。但你也可以創建一個沒有任何自定義處理器的開啟器,在這兒你就是這么做的。你將在本章后面探究重定向的部分看到如何定義和使用自定義處理器的內容。 | | \[4\] | 最后一個步驟是,使用你創建的 `Request` 對象告訴開啟器打開 URL。因為你能從獲得的信息中看到所有調試信息,這個步驟實際上獲得了資源并且把返回數據存儲在了 `feeddata` 中。 | ## 例?11.5.?給 `Request` 添加頭信息 ``` >>> request <urllib2.Request instance at 0x00250AA8> >>> request.get_full_url() http://diveintomark.org/xml/atom.xml >>> request.add_header('User-Agent', `...` 'OpenAnything/1.0 +http://diveintopython.org/') >>> feeddata = opener.open(request).read() connect: (diveintomark.org, 80) send: ' GET /xml/atom.xml HTTP/1.0 Host: diveintomark.org User-agent: OpenAnything/1.0 +http://diveintopython.org/ ' reply: 'HTTP/1.1 200 OK\r\n' header: Date: Wed, 14 Apr 2004 23:45:17 GMT header: Server: Apache/2.0.49 (Debian GNU/Linux) header: Content-Type: application/atom+xml header: Last-Modified: Wed, 14 Apr 2004 22:14:38 GMT header: ETag: "e8284-68e0-4de30f80" header: Accept-Ranges: bytes header: Content-Length: 26848 header: Connection: close ``` | | | | --- | --- | | \[1\] | 繼續前面的例子;你已經用你要訪問的 URL 創建了 `Request` 。 | | \[2\] | 使用`Request` 對象的 `add_header` 方法,你能向請求中添加任意的 HTTP 頭信息。第一個參數是頭信息,第二個參數是頭信息的值。`User-Agent` 的約定格式是:應用名,跟一個斜線,跟版本號。剩下的是自由的格式,你將看到許多瘋狂的變化,但通常這里應該包含你的應用的 URL。和你的請求的其他信息一樣,`User-Agent` 會被服務器紀錄下來,其中包含你的應用的 URL。如果發生錯誤,服務器管理員就能通過查看他們的訪問日志與你聯系。 | | \[3\] | 之前你創建的`opener` 對象也可以再生,且它將再次獲得相同的 feed,但這次使用了你自定義的 `User-Agent` 頭信息。 | | \[4\] | 這就是你發送的自定義的 `User-Agent`,代替了 Python 默認發送的一般的 `User-Agent`。若你繼續看,會注意到你定義的是 `User-Agent` 頭信息,但實際上發送的是 `User-agent` 頭信息。看看有何不同?`urllib2` 改變了大小寫所以只有首字母是大寫的。這沒問題,因為 HTTP 規定頭信息的字段名是大小寫無關的。 |
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看