python3 requests模塊

1、Requests用法:

一、發送請求:

1)、請求類型:
req_obj = requests.get("https://www.baidu.com")
requests支持多種請求類型:
requests.post
requests.put
requests.delete
requests.head
requests.options

2)、傳遞URL參數:
payload = {'key1': 'value1', 'key2': 'value2'}
req_obj = requests.get("https://www.baidu.com", params=payload)
print(req_obj.url)
輸出:
https://www.baidu.com/?key1=value1&key2=value2

 三、響應內容

1)、文本響應內容:
req_obj.text #響應內容Requests 會自動解碼來自服務器的內容。大多數 unicode 字符集都能被無縫地解碼。
req_obj.encoding #輸出編碼格式,也能夠對它進行賦值

2)、對於非文本的響應內容:
req_obj.content #輸出二進制格式

如下載一個圖片爲例:
req_obj = requests.get("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1521793519116&di=c4f224e5bebdc582cca54b8d22fddcc5&imgtype=0&src=http%3A%2F%2Fd.hiphotos.baidu.com%2Fimage%2Fpic%2Fitem%2Ff9198618367adab45913c15e87d4b31c8601e4e8.jpg")
with open('asd.jpg','wb') as f:
f.write(req_obj.content)

3)、json響應內容:
req_obj = requests.get('https://github.com/timeline.json')
print(req_obj.json())
#成功調用 r.json() 並不意味着響應的成功,使用 r.raise_for_status() 或者檢查 r.status_code 是否和你的指望相同

四、定製請求頭:

headers={ 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0',
          'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
          'Accept-Language':'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2'}

req_obj = requests.get('https://github.com/timeline.json',headers=headers)

五、複雜的POST請求:

1)、能夠是一個字典,是html請求的參數:
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.post("http://httpbin.org/post", data=payload)

2)、能夠是一個json數據:
import json
url = 'https://api.github.com/some/endpoint'
payload = {'some': 'data'}
r = requests.post(url, data=json.dumps(payload))

3)、能夠使用自行編碼:
url = 'https://api.github.com/some/endpoint'
payload = {'some': 'data'}
r = requests.post(url, json=payload)

注:上面兩種的區別是:
  json 表示使用application/json方式提交請求  
  data 使用application/form-urlencode方式提交請求

六、響應狀態碼:html

req_obj = requests.get("https://www.baidu.com", params=payload)
print(req_obj.encoding)
print(req_obj.status_code == requests.codes.ok)

req_obj.raise_for_status()   #若是發送了一個錯誤請求(一個 4XX 客戶端錯誤,或者 5XX 服務器錯誤響應)會拋出異常

七、其餘一些使用方式:python

req_obj = requests.get("https://www.baidu.com")
print(req_obj.headers)    #響應頭
print(req_obj.cookies) #響應Cookies
print(req_obj.history) #請求歷史
requests.get('http://github.com', allow_redirects=False) #禁用重定
requests.get('http://github.com', timeout=0.001) #設置超時時間

with open('massive-body',‘rb’) as f:
requests.post('http://some.url/streamed', data=f) #上傳文件

 requests.get('https://github.com', verify=True)  #開啓證書驗證(默認開啓)

一些高級的用法見:git

http://docs.python-requests.org/zh_CN/latest/user/advanced.html#streaming-uploadsgithub

異步非阻塞請求:https://github.com/kennethreitz/grequestsjson

相關文章
相關標籤/搜索