#--Name: Requests庫詳解
0x00 什麼是Requests?
Request是用Python語音編寫,基於urllib,採用Apache2 Licensed開源協議的HTTP庫.
比urllib更方便,節省大量的工作,完全滿足HTTP測試需求
總而言之---Python實現的簡單易用的HTTP庫
0x01 Install It
pip install requests
安裝完成後,使用下面的命令驗證安裝是否成功
import requests
0x02 實例
#實例1: 使用requests的相關方法操作
import requests
response = requests.get('https://www.baidu.com')
print(type(response))
print(response.status_code)
print(type(response.text))
print(response.cookies)
#實例2: 各種請求方式
import requests
requests.post('http://httpbin.org/post')
requests.put('http://httpbin.org/put')
requests.delete('http://httpbin.org/delete')
requests.get('http://httpbin.org/get')
requests.head('http://httpbin.org/get')
requests.options('http://httpbin.org/get')
0x03 請求部分
#基本GET請求
#基本寫法:
import requests
response = requests.get('http://httpbin.org/get')
print(requests.text)
#帶參數的GET請求
import requests
response = requests.get('http://httpbin.org/get?name=germey&age=22')
print(response.text)
#構造GET請求參數
import requests
data = {
'name':'germey',
'age':22
}
response = requests.get('http://httpbin.org/get",params = data)
print(response.text)
#解析JSON
import requests
import json
response = requests.get('http://httpbin.org/get')
print(type(response.text))
print(response.json())
print(json.loads(response.text))
print(type(response.json()))
#獲取二進制數據
import requests
response = request.get('https://github.com/favicon.ico')
print(type(response.text),type(response.content))
print(response.text)
print(response.content)
#獲取二進制數據並寫入文件
import requests
response = request.get('https://github.com/favicon.ico')
with open('favicon.ico','wb') as f:
f.write(response.content)
f.close()
#添加headers
#未添加headers,該url返回報錯
import rquests
response = requests.get('https://www.zhihu.com/explore')
print(response.text)
#添加headers
import requsts
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0'
}
response = requests.get('https://www.zhihu.com/explore',headers = headers)
print(response.text)
#基本POST請求
import requests
data = {'name':'germey','age':'22'}
response = requests.post('http://httpbin.org/post',data=data)
print(response.text)
#帶有headers的POST請求
import requests
headers = {
'User-Agent':'Ruby'
}
data = {'name':'germey','age':'22'}
response = requests.post('http://httpbin.org/post',data=data,headers=headers)
print(response.text)
#響應部分
#response 屬性
import requests
response = requests.get('https://www.baidu.com')
print(type(response.status_code),response.status_code)
print(type(response.headers),response.headers)
print(type(response.cookies),response.cookies)
print(type(response.url),response.url)
response = requests.get('http://www.jd.com')
print(type(response.history),response.history)
#狀態碼的判斷
#判斷狀態碼是否是 ok,也就是http 200 ok
import requests
response = requests.get('https://www.baidu.com')
#exit() if not response.status_code == requests.codes.ok else print('網站正常')
if not response.status_code == requests.codes.ok:
exit()
else:
print('網站正常')
#判斷狀態碼是否等於200,同上
import requests
response = requests.get('http://www.jianshu.com')
exit() if not response.status_code == 200 else print('Request Successfully')
#requests 的高(gao)級(ji)操作
#文件上傳
import reqeusts
files = {'file':open('favicon.ico','rb)}
response = requests.post('http://httpbin.org/post',files=files)
print(response.text)
#獲取Cookie
import requests
response = requests.get('https://www.baidu.com')
print(response.cookies)
for key,value in response.cookies.items():
print(key + '=' + value)
#會話維持 模擬登陸
#用例1: 未使用Session對象
import requests
requests.get('http://httpbin.org/cookies/set/number/123456789')
response = requests.get('http://httpbin.org/cookies')
print(response.text)
#用例2: 使用session對象
import requests
s = requests.Session()
s.get('http://httpbin.org/cookies/set/number/123456789')
response = requests.get('http://httpbin.org/cookies')
print(response.text)
#證書驗證
#requests打開https的時候,判斷證書是否是合法的,12306的證書是非法的,那麼
#我們使用常規的方法是無法訪問的
import requests
response = requests.get('https://www.12306.cn/')
print(response.status_code)
#用例2: 不使用證書訪問https
import requests
response = requests.get('https://12306.cn',verify=False)
print(response.status_code)
#用例3: 使用證書 使用指定證書和密鑰
import requests
response = requests.get('https://12306.cn',cert=('/path/server.crt','/path/key'))
print(requests.status_code)
#有關於代理的使用
#單一代理設置
import requests
proxies = {
'http':'http://127.0.0.1:9991',
'https':'https://127.0.0.1:9991'
}
response = requests.get('https://www.taobao.com',proxies=proxies)
print(response.status_code)
#用例2: 帶用戶名密碼的代理設置
import requests
proxies={
'http':'http://user:[email protected]:9991'
}
response = requests.get('https://www.taobao.com',proxies=proxies)
print(response.status_code)
#用例3: 使用Socks代理
pip install requests[socks]
import requests
proxies = {
'http':'socks5://127.0.0.1:×××',
'https':'socks5://127.0.0.1:×××'
}
response = requests.get('https://www.taobao.com',proxies=proxies)
print(response.status_code)
#超時設置
import requests
response = requests.get('https://www.taobao.com',timeout = 1)
print(response.status_code)
#認證設置
#對於認證頁面,需要使用認證方式
#用例1: 未設置認證值
import requests
from requests.auth import HTTPBasicAuth
r = requests.get('http://127.0.0.1:1111')
print(r.status_code)
#用例2: 設置認證值
import requests
from requests.auth import HTTPDigestAuth
r = requests.get('http://192.168.16.1',auth=HTTPDigestAuth('aaa','123456'))
print(r.status_code)
#異常處理
import requests
from requests.exceptions import ReadTimeout,HTTPError,RequestException
try:
response = requests.get('http://httpbin.org/get',timeout = 0.1)
print(response.status_code)
except ReadTimeout:
print('Time Out!!!')
except HTTPError:
print('HTTP Error!!!')
except RequestException:
print('Error!!!')