使用python封裝get+post請求


思路:

將平時用的多的get和post請求封裝,提高代碼重用率。

其中Session類可以通過實例化,保存cookie信息,可以在程序結束前多次通過保存的cookie信息保持登錄狀態的訪問。

那么為什么不將所有的方法都封裝到類里呢?

(因為……累……)

不將所有方法都封裝到類里是因為有時發送請求時不需要攜帶cookie,那么就可以直接通過get,post函數發送請求即可。

而且,不使用cookie時就不需要實例化對象,減少資源的消耗。

最重要的一點是,可以少寫一行代碼😂……你想啊,調用一次就少寫一行,10次就是10行……四舍五入就是一萬行( ̄y▽ ̄)╭ Ohohoho.....

額……咳咳……好了,不扯了,下邊上代碼

源代碼:

 1 # 導入請求包request和將字典轉換成bytes的包parse
 2 from urllib import request, parse
 3 # 導入請求失敗時報錯的包
 4 from urllib.error import HTTPError, URLError
 5 # 導入http中管理cookie的包
 6 from http import cookiejar
 7 
 8 
 9 # 將需要保存cookie的請求封裝成類
10 class Session(object):
11     def __init__(self):
12         # 創建cookie容器對象,cookie_object
13         cookie_object = cookiejar.CookieJar()
14         # 創建cookie管理器,handler
15         handler = request.HTTPCookieProcessor(cookie_object)
16         # 新建一個帶有cookie管理器的opener,替換原有的request.urlopen()
17         # opener 遇到有cookie的response的時候,調用handler內部的一個函數, 存儲到cookie object
18         self.opener = request.build_opener(handler)
19 
20     # get請求
21     def get(self, url, headers=None):
22         return get(url, headers, self.opener)
23 
24     # post請求
25     def post(self, url, form, headers=None):
26         return post(url, form, headers, self.opener)
27 
28 
29 # 封裝get請求
30 def get(url, headers=None, opener=None):
31     return urlrequest(url, headers=headers, opener=opener)
32 
33 
34 # 封裝post請求
35 def post(url, form, headers=None, opener=None):
36     return urlrequest(url, form, headers=headers, opener=opener)
37 
38 
39 # 發送請求函數
40 def urlrequest(url, form=None, headers=None, opener=None):
41     '''
42     :param url: 訪問地址
43     :param form: post請求時發送的表單信息
44     :param headers: 頭信息
45     :param opener: 帶有cookie管理器的一個發送請求的東西
46     :return: 返回響應信息的讀取內容,response.read()
47     '''
48 
49     # 如果沒有傳入headers,則使用下邊默認headers
50     if headers == None:
51         headers = {
52             'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
53         }
54     # 當發生異常時返回空的二進制類型的html_bytes
55     html_bytes = b''
56     try:
57         if form:  # POST請求
58             # 轉換成str
59             form_str = parse.urlencode(form)
60             # 轉換成bytes
61             form_bytes = form_str.encode('utf-8')
62             # 傳入post請求參數,form表單數據
63             req = request.Request(url, data=form_bytes, headers=headers)
64         else:  # GET請求
65             req = request.Request(url, headers=headers)
66         # 發送請求,獲取響應
67         if opener:  # 通過實例化Session類時,通過opener發送請求
68             response = opener.open(req)
69         else:  # 直接通過urlopen發送請求
70             response = request.urlopen(req)
71         # 讀取響應數據
72         html_bytes = response.read()
73     except HTTPError as e:
74         print(e)
75     except URLError as e:
76         print(e)
77     # 返回二進制響應結果
78     return html_bytes
79 
80 
81 if __name__ == '__main__':
82     # 百度測試get請求
83     url = 'http://www.baidu.com'
84     html_byte = get(url)
85     print(html_byte)
86     print('-'*50)
87     # 百度翻譯測試post請求
88     url = 'http://fanyi.baidu.com/sug'
89     form = {
90         'kw': '呵呵'
91     }
92     html_bytes = post(url, form=form)
93     print(html_bytes)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM