引言
網路請求在現代編程中是一個重要的環節,特別是在Web開發中,很多功能都需要與伺服器進行交互。Python作為一種腳本語言,自帶有一個強大的HTTP庫——requests。使用requests庫,可以順利進行各種網路請求,包括GET、POST、PUT等常見的方式。而RequestsSession則是requests庫的一個高級功能,為多次訪問同一網站提供了一些優化,如自動存儲cookie等。本文將從如何使用requests和RequestsSession發送網路請求,如何處理返回結果,以及其它一些常用技巧等方面進行詳細介紹。
網路請求的基本功
1. 發送GET請求
發送GET請求是最簡單的一種請求方式。requests庫的get方法可以讓我們非常方便地進行發送請求操作,下面是一個簡單的示例:
import requests
response = requests.get("http://www.baidu.com")
print(response.text)
運行上面的代碼,可以得到百度首頁的HTML代碼。
2. 發送POST請求
POST請求可以向伺服器提交數據。一般來說,POST數據通常放在請求體中。requests庫的post方法可以讓我們非常方便地進行發送POST請求操作,下面是一個簡單的示例:
import requests
payload = {'key1': 'value1', 'key2': 'value2'}
response = requests.post("http://httpbin.org/post", data=payload)
print(response.text)
運行上面的代碼,可以得到POST請求返回的內容。
使用RequestsSession進行GET請求
使用RequestsSession可以進行多次訪問同一網站,並且可以保證每次訪問使用的cookie一致。下面是一個使用RequestsSession進行GET請求的示例:
import requests
session = requests.Session()
r = session.get('https://github.com/')
print(r.text)
使用RequestsSession其實就是新建一個Session對象,然後使用該對象的get方法進行請求。如上就是簡單的調用方法,可以看到我們不需要再次指定網站地址,這意味著我們可以緊密保有會話的狀態。
使用RequestsSession進行POST請求
同樣,我們可以使用RequestsSession進行POST請求。下面是一個使用RequestsSession進行POST請求的示例:
import requests
session = requests.Session()
payload = {'key1': 'value1', 'key2': 'value2'}
r = session.post("http://httpbin.org/post", data=payload)
print(r.text)
與上面GET請求類似,這裡我們只需要改變方法名稱為post即可。
使用RequestsSession進行文件上傳
1. 單個文件上傳
我們可以使用RequestsSession將文件上傳到伺服器。這裡我們舉一個發送單個文件的例子:
import requests
from requests_toolbelt.multipart.encoder import MultipartEncoder
session = requests.Session()
m = MultipartEncoder(fields={'file': ('test.txt', open('test.txt', 'rb'), 'text/plain')})
r = session.post("http://httpbin.org/post", data=m, headers={'Content-Type': m.content_type})
print(r.text)
運行成功後,返回結果即為上傳後的數據信息。
2. 多個文件上傳
在實際應用中,我們可能需要上傳多個文件。此時,我們同樣可以使用RequestsSession將多個文件上傳到伺服器,這裡我們舉一個發送多個文件的例子:
import requests
from requests_toolbelt.multipart.encoder import MultipartEncoder
session = requests.Session()
m = MultipartEncoder(
fields=[
('field1', 'value1'),
('field2', 'value2'),
('file1', ('test1.txt', open('test1.txt', 'rb'), 'text/plain')),
('file2', ('test2.txt', open('test2.txt', 'rb'), 'text/plain'))
]
)
r = session.post("http://httpbin.org/post", data=m, headers={'Content-Type': m.content_type})
print(r.text)
其他技巧
1. 設置請求頭信息
我們可以使用requests庫自定義請求頭信息,下面是一個設置請求頭信息的示例:
import requests
url = 'http://httpbin.org/headers'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}
r = requests.get(url, headers=headers)
print(r.content)
2. 使用代理伺服器
如果我們需要使用代理伺服器來進行網路請求,也可以採用requests庫進行操作。下面是一個使用代理伺服器的示例:
import requests
url = 'http://httpbin.org/ip'
proxies = {
'http': 'http://10.10.1.10:3128',
'https': 'http://10.10.1.10:1080',
}
r = requests.get(url, proxies=proxies)
print(r.content)
3. 設置超時時間
在網路請求過程中,如果連接超時或響應超時,我們可以設置超時時間來避免長時間等待導致程序的崩潰或堵塞。下面是一個設置超時時間的示例:
import requests
url = 'http://httpbin.org/delay/5'
r = requests.get(url, timeout=3)
print(r.content)
結語
在本文中,我們詳細介紹了使用requests和RequestsSession進行網路請求的方法和技巧。requests庫具有簡單易用、介面清晰等特點,能夠有效地提高我們的Web開發效率。對於日常開發中常見的需要網路請求的場景,掌握requests庫的常用方法和技巧將能夠事半功倍。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/285049.html