<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 11.4.?調試 HTTP web 服務 首先,讓我們開啟 Python HTTP 庫的調試特性并查看網絡線路上的傳輸過程。這對本章的全部內容都很有用,因為你將添加越來越多的特性。 ## 例?11.3.?調試 HTTP ``` >>> import httplib >>> httplib.HTTPConnection.debuglevel = 1 >>> import urllib >>> feeddata = urllib.urlopen('http://diveintomark.org/xml/atom.xml').read() connect: (diveintomark.org, 80) send: ' GET /xml/atom.xml HTTP/1.0 Host: diveintomark.org User-agent: Python-urllib/1.15 ' reply: 'HTTP/1.1 200 OK\r\n' header: Date: Wed, 14 Apr 2004 22:27:30 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\] | `urllib` 依賴于另一個 Python 的標準庫,`httplib`。通常你不必顯式地給出 `import httplib` (`urllib` 會自動導入),但是你可以為 `HTTPConnection` 類 (`urllib` 在內部使用它來訪問 HTTP 服務器) 設置調試標記。這是一種令人難以置信的有用技術。Python 其他的一些庫也有類似的調試標記,但是沒有命名和開啟它們的特殊標準;如果有類似的特性可用,你需要閱讀每一個庫的文檔來查看使用方法。 | | \[2\] | 既然已經設置了調試標記,HTTP 的請求和響應信息會實時地被打印出來。首先告訴你的是你連接服務器 `diveintomark.org` 的 80 端口,這是 HTTP 的標準端口。 | | \[3\] | 當你請求 Atom feed 時,`urllib` 向服務器發送三行信息。第一行指出你使用的 HTTP verb 和資源的路徑 (除去域名)。在本章中所有的請求都將使用 `GET`,但是在下一章的 SOAP 中,你會看到所有的請求都使用 `POST` 。除了請求的動詞不同之外,基本的語法是相同的。 | | \[4\] | 第二行是 `Host` 頭信息,它指出你所訪問的服務的域名。這一點很重要,因為一個獨立的 HTTP 服務器可以服務于多個不同的域。當前我的服務器服務于 12 個域;其他的服務器可以服務于成百乃至上千個域。 | | \[5\] | 第三行是 `User-Agent` 頭信息。在此你看到的是由 `urllib` 庫默認添加的普通的 `User-Agent` 。在下一節,你會看到如何自定義它的更多細節。 | | \[6\] | 服務器用狀態代碼和一系列的頭信息答復 (其中一些數據可能會被存儲到 `feeddata` 變量中)。這里的狀態代碼是 `200`,意味著 “一切正常,這就是您請求的數據”。服務器也會告訴你響應請求的數據、一些有關服務器自身的信息,以及傳給你的數據的內容類型。根據你的應用不同,這或許有用,或許沒用。這充分確認了你所請求的是一個 Atom feed,瞧,你獲得了 Atom feed (`application/atom+xml`,它是已經注冊的有關 Atom feeds 的內容類型)。 | | \[7\] | 當此 Atom feed 有最近的修改,服務器會告訴你 (本例中,大約發生在 13 分鐘之前)。當下次請求同樣的 feed 時,你可以這個日期再發送給服務器,服務器將做最近修改數據檢查。 | | \[8\] | 服務器也會告訴你這個 Atom feed 有一個值為 `"e8284-68e0-4de30f80"` 的 ETag hash。這個 hash 自身沒有任何意義;除了在下次訪問相同的 feed 時將它送還給服務器之外,你也不需要用它做什么。然后服務器使用它告訴你修改日期是否被改變了。 |
                  <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>

                              哎呀哎呀视频在线观看