<pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
    <pre id="vvttv"></pre>

      <p id="vvttv"></p>

          <p id="vvttv"></p>

                <p id="vvttv"></p>

                <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                  <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                    <p id="vvttv"></p>

                    11.4. 調試 HTTP web 服務

                    首先,讓我們開啟 Python HTTP 庫的調試特性并查看網絡線路上的傳輸過程。這對本章的全部內容都很有用,因為你將添加越來越多的特性。

                    例 11.3. 調試 HTTP

                    >>> import httplib
                    >>> httplib.HTTPConnection.debuglevel = 1             1
                    >>> import urllib
                    >>> feeddata = urllib.urlopen('http://diveintomark.org/xml/atom.xml').read()
                    connect: (diveintomark.org, 80)                       2
                    send: '
                    GET /xml/atom.xml HTTP/1.0                            3
                    Host: diveintomark.org                                4
                    User-agent: Python-urllib/1.15                        5
                    '
                    reply: 'HTTP/1.1 200 OK\r\n'                          6
                    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  7
                    header: ETag: "e8284-68e0-4de30f80"                   8
                    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 時將它送還給服務器之外,你也不需要用它做什么。然后服務器使用它告訴你修改日期是否被改變了。

                      <pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
                      <pre id="vvttv"></pre>

                        <p id="vvttv"></p>

                            <p id="vvttv"></p>

                                  <p id="vvttv"></p>

                                  <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                                    <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                                      <p id="vvttv"></p>

                                      这里只有精品视频