向某個url
發送get請求html
requests.get("https://www.baidu.com")
發送一個post請求python
requests.post("https://www.baidu.com",data={"name":"zhuyu"})
發送其餘類型的請求也均可以json
get請求傳遞參數服務器
arg = {"name":"zhuyu","password":"123"} requests.get("www.baidu.com",params=ars)
post請求傳遞參數cookie
data = {"key":"value"} requests.post("www.baidu.com",data=data)
獲取響應的內容網絡
response = requests.get("www.baidu.com") html = response.text # html就是網站的源碼 url = response.url # 請求的url
二進制響應內容session
response.content # 返回的是二進制數據
json響應內容post
response.json # 若是響應的是json格式,它會自動幫你處理json數據,若是不能轉換的話,會拋出異常 # 注意有的服務器在失敗的響應也會返回json對象,請使用raise_for_status()或者status_code進行校驗
url = "www.baidu.com" headers = { "user-agent":"xixi" } response = requests.get(url=url,headers=headers)
傳遞相似html表單的數據網站
url = "www.baidu,com" data = {"name":"zhuyu"} requests.post(url=url,data=data)
傳遞json格式數據編碼
import json url = "www.baidu,com" data = {"name":"zhuyu"} # 方式一: requests.post(url=url,data=json.dumps(data)) # 方式二: requests.post(url=url,json=data)
url = "www.baidu,com" files = {"file":open("a.txt","rb")} requests.post(url=url,files=files)
response = requests.get("www.baidu.com") status_code = response.status_code # 獲取狀態碼 # 若是返回一個400,500的狀態碼,能夠經過raise_for_status()來拋出異常
response.headers # 這是響應的頭部信息
獲取響應頭的cookie信息
cookie = response.cookie #獲取到cookie的字典
爲requests設置cookie信息
# cookie它是RequestsCookieJar的對象 cookies = requests.cookoes.RequestsCookieJar() cookies.set("name","zhuyu") cookies.set("password":"123") requests.get(url,cookies=cookies)
history方法
這是response對象裏的一個方法或者屬性,它是一個對象列表,按照從最老到最近的請求進行排序的
allow_redirects參數,模式爲True的
response = requests.get(url=url,allow_redirects=False) # 上面代碼是禁止了重定向
你能夠告訴reuqests在通過timeout參數設定的秒數時間以後中止等待響應
requests.get(url=url,timeout=5)
錯誤 | 異常 |
---|---|
遇到網絡問題 | Requests會拋出ConnectionError異常 |
返回了不成功的狀態碼 | Response會拋出raise_fir_status異常 |
請求超時 | 拋出Timeout異常 |
若請求超過了設定的最大重定向次數 | 拋出TooManyRedirects異常 |
會話對象讓你在可以跨請求保持某些參數
# 拿到一個會話對象,這個會話一樣能實現requests中的方法 session = requests.Session() # 經過會話對象發送一個get請求到url session.get(url=url) ------------------------------------------------------ # 會話也可用來爲請求方法提供數據 session = requests.Session() session.headers.update({"name":"zhuyu"}) session.get(url,headers={"age":22}) # 此時在本次請求的請求中有name:"zhuyu"&age:22,這兩對鍵值對 ------------------------------------------------------ # 上面這個只是在會話層面,若是在方法層面呢?參數是不會被跨請求保持的 session = requests.Session() session.get(url=url,cookies={"name":"zhuyu"}) # 此時發送的get請求是帶上"name"="zhuyu"這是cookie的 # 下面仍是同一個session對象,我再發一個get請求,此時我沒有寫cookies這個參數 session.get(url=url) # 結果:你會發現本次請求沒有帶上cookie
response = requests.get(url=url) # 列舉下這行代碼作了那幾步 # 一、生成了一個Request的對象,裏面包含着所攜帶的數據,將該對象發送到某個服務器去請求 # 二、一旦響應以後,就會產生一個Response的對象,這個對象包含着服務器傳來的數據 # 三、最後將這個Response對象賦值給了response這個變量 ------------------------------------------------------------------------ response.headers # 就是響應的請求頭 response.request.headers # 就是請求的請求頭
import requests response = requests.get(url) # 其實請求最終仍是以session對象發送的, session.send(Request對象,**kwargs) ------------------------------------- from requests import Request,Session session = Session() req = Request("GET",url) request=PreparedRequest(req) # 官方文檔說,咱們能夠在session對象send以前,對PreparedRequest對象再進行一些操做 response = session.send(request, stream=strean, verify=verify, proxies=proxies, cert=cert, timeout=timeout) print (response.status_code)
Requests能夠爲HTTPS請求驗證SSL證書,SSL驗證默認是開啓的,驗證失敗的話會拋出SSLError異常
# 設置證書路徑 # 方式一: request.get(url=url,verify=路徑) # 方式二: session = requests.Session() session.verify = 路徑 # verify對應:SSL證書路徑
# cert :指定證書的路徑 requests.get(url=url,cert=路徑) session = requests.Session() session.cert = 路徑
requests
默認附帶了一套它信任的證書,若是系統中裝了certifi包,requests
會試圖使用它裏面的證書,這樣用戶就不須要在修改代碼的狀況下更新他們信任的證書,因此咱們常常更新certifi包
# stream:控制響應體內容的下載 response = requests.get(url,stream=True)
# requests能夠上傳文件 with open("a.txt","rb") as f: requests.post(url,data=f) # 注意:傳送的數據也就是文件,應該是一個文件對象 # 強烈建議建議使用二進制
files = []
''' 可用的鉤子:response,從一個請求產生的響應 用法:傳遞一個字典給hooks這個變量 {hook_name:callback_function} 這個callback_function會接收一個數據塊做爲它的第一個參數 hooks = dict(response=print_url) ''' def print_url(response,*args,**kwargs): pass
import requests proxies = { "http":"http://10.10.1.10:3128", "https":"https://10.10.1.10:1080" } response = requests.get(url=url,proxies=proxies)