Python3的兩種HTTP請求實現

2021-07-16 16:08:35 字數 1634 閱讀 1970

初學python,近兩天在考慮寫個爬蟲玩玩,於是花了點時間了解大蟒蛇的標準庫。

既然是初學,那我應該知道如何用才行。使用搜尋引擎也全是收到的python2.x 的內容,於是就用2.x 的用法在3.x的文件上搜尋了下。知道了兩種請求http的基本用法。

第一種方法:使用urllib.request.urlopen() 

req = urllib.request.request(url, none, header, none, false, method)

content = urllib.request.urlopen(req)

第二種方法:使用http.client.httpconnection.request()

檔案httprequest.py 詳細**

讓我頗感意外的是兩種執行結果並未返回相同的狀態碼,乙個是200,乙個是302重定向。遺憾的是,官方的英文文件實在沒說清楚兩種方式的使用場景,(也許是我英文水平有限沒看明白)由於對http協議了解不夠,在得到這個結果的時候並未想到在返回碼上分析原因,而是使用抓包工具抓包分析。(詳細抓包過程就不在這裡說明了,有興趣可自己抓包看看,win使用wiireshark,linux使用tcpdump) 抓包發現使用第一種方法請求完畢後,本機會關閉這個tcp連線並對響應頭中的location: 傳送get請求建立乙個新的連線, csdn響應get請求並返回200狀態碼與頁面資料。而使用第二種方法,在傳送請求後便關閉tcp,然後返回狀態碼302。

很顯然,urllib是比httpconnection更高層次的封裝,至少對重定向來講,httpconnection不會做任何處理,直接返回重定向頭,而urllib收到302狀態碼後自動請求重定向的頁面,並返回重定向後的頁面響應。

現在還有兩個問題沒有完全解決:

1、對http協議本身認識不夠,不知道urllib的封裝還有哪些不一樣?

2、http.client.httpconnection可以通過.set_debuglevel顯示除錯資訊,通過urlopen又如何開啟。查了文件,試過以下方法,能夠執行,但無效:

python3 讀寫檔案的兩種小方法

7.乙個新的語句,with a open r c users xiaoming desktop qqq.txt w a.write sdgshgafg nsdtdfghfsd nsdfsdfdsf a.close 普通的開啟檔案可以這樣寫,但是最後還要加 close 必須加。而用 with 語句則可...

Python3 多執行緒的兩種實現方式

python的標準庫提供了兩個模組 thread和threading,thread是低階模組,threading是高階模組,對 thread進行了封裝。絕大多數情況下,我們只需要使用threading這個高階模組。方式一 把乙個函式傳入並建立thread例項,然後呼叫start 開始執行 impor...

Python3 動態匯入模組的兩種方式

動態匯入模組就是只知道str型別的模組名字串,通過這個字串匯入模組 需要匯入的模組 class ccc object def init self,name self.name name 目錄結構 第一種方式 python直譯器內部使用,不建議用 module name import lib.meta...