使用Python發送請求


 Python3自帶的http.client和urllib.request都能發送http請求,不過相對來說使用較麻煩,第三方庫requests讓發送請求更簡單,支持自動編碼解碼,會話保持,長連等

 requests安裝

  • Windows: 打開cmd命令行,輸入pip install requests,等待安裝完成即可
  • Linux: (建議使用Python3),終端中輸入pip3 install requests,等待安裝完成即可
  • Mac: (建議使用Python3), sudo python3 -m pip install requests,等待安裝完成即可

 驗證是否安裝成功:

     打開命令行,輸入python,在python shell環境下輸入import requests沒有報錯即安裝成功

 requests的使用

 一個最簡單的GET請求

 發送一個請求分3步:

  1. 組裝請求: 請求可能包含url,params(url參數),data(請求數據),headers(請求頭),cookies等,最少必須有url
  2. 發送請求,獲取響應:支持get,post等各種方法發送,返回的是一個響應對象
  3. 解析響應: 輸出響應文本

 打開Pycharm,新建一個demo項目,項目下新建一個Python文件,輸入以下內容:

# 導入requests包 import requests # 1. 組裝請求 url = "http://httpbin.org/get" # 這里只有url,字符串格式 # 2. 發送請求,獲取響應 res = requests.get(url) # res即返回的響應對象 # 3. 解析響應 print(res.text) # 輸出響應的文本

 帶參數的GET請求

import requests url = "http://www.tuling123.com/openapi/api?key=ec961279f453459b9248f0aeb6600bbe&info=你好" # 參數可以寫到url里 res = requests.get(url=url) # 第一個url指get方法的參數,第二個url指上一行我們定義的接口地址 print(res.text) 


import requests 

url = "http://www.tuling123.com/openapi/api" params = {"key":"ec961279f453459b9248f0aeb6600bbe","info":"你好"} # 字典格式,單獨提出來,方便參數的添加修改等操作 res = requests.get(url=url, params=params) print(res.text) 
 
        

 傳統表單類POST請求(x-www-form-urlencoded)

import requests url = "http://httpbin.org/post" data = {"name": "hanzhichao", "age": 18} # Post請求發送的數據,字典格式 res = requests.post(url=url, data=data) # 這里使用post方法,參數和get方法一樣 print(res.text) 
 
        

 JSON類型的POST請求(application/json)

import requests url = "http://httpbin.org/post" data = '''{ "name": "hanzhichao", "age": 18 }''' # 多行文本, 字符串格式,也可以單行(注意外層有引號,為字符串) data = '{"name": "hanzhichao", "age": 18}' res = requests.post(url=url, data=data) # data支持字典或字符串 print(res.text) 

 requests庫詳解

 請求方法

  • requests.get()
  • requests.post()
  • requests.put()
    ...
  • requests.session(): 用於保持會話(session)
    除了requests.session()外,其他請求方法的參數都差不多,都包含url,params, data, headers, cookies, files, auth, timeout等等

 

 請求參數

  • url: 字符串格式,參數也可以直接寫到url中
  • params:url參數,字典格式
  • data: 請求數據,字典或字符串格式
  • headers: 請求頭,字典格式
  • cookies: 字典格式,可以通過攜帶cookies繞過登錄
  • files: 字典格式,用於混合表單(form-data)中上傳文件
  • auth: Basic Auth授權,數組格式 auth=(user,password)
  • timeout: 超時時間(防止請求一直沒有響應,最長等待時間),數字格式,單位為秒

 響應解析

  • res.status_code: 響應的HTTP狀態碼
  • res.reason: 響應的狀態碼含義
  • req.text:響應的文本格式,按req.encoding解碼
  • req.content: 響應的二進制格式
  • req.encoding: 解碼格式,可以通過修改req.encoding='utf-8'來解決一部分中文亂碼問題
  • req.apparent_encoding:真實編碼,由chardet庫提供的明顯編碼
  • req.json(): (注意,有括號),響應的json對象(字典)格式,慎用!如果響應文本不是合法的json文本,或報錯
  • req.headers: 響應頭
  • req.cookies: 響應的cookieJar對象,可以通過req.cookies.get(key)來獲取響應cookies中某個key對應的值


免責聲明!

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



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