最近中文字幕国语免费完整,中文亚洲无线码49vv,中文无码热在线视频,亚洲自偷自拍熟女另类,中文字幕高清av在线

當(dāng)前位置: 首頁 > 開發(fā)者資訊

Python如何發(fā)送 HTTP 請求? requests 庫常用方法有哪些?

  在 Python 開發(fā)中,發(fā)送 HTTP 請求是實(shí)現(xiàn)接口調(diào)用、數(shù)據(jù)爬取、服務(wù)交互的核心需求 —— 無論是調(diào)用第三方 API(如天氣接口、支付接口),還是與后端服務(wù)通信,都需要通過 HTTP 協(xié)議傳遞數(shù)據(jù)。Python 內(nèi)置的urllib庫雖能實(shí)現(xiàn)基礎(chǔ)請求,但語法繁瑣;而第三方庫requests以簡潔的 API、完善的功能成為主流選擇。本文將從 HTTP 請求基礎(chǔ)入手,詳解requests庫的安裝、常用方法及實(shí)戰(zhàn)技巧,幫助你高效實(shí)現(xiàn) HTTP 交互。

  一、HTTP 請求基礎(chǔ):理解核心概念

  在使用requests庫前,需先明確 HTTP 請求的核心要素,確保后續(xù)操作符合協(xié)議規(guī)范:

  請求方法:常見類型包括 GET(獲取資源)、POST(提交資源)、PUT(更新資源)、delete(刪除資源),不同方法對應(yīng)不同的業(yè)務(wù)場景;

  請求 URL:目標(biāo)資源的地址(如https://api.example.com/weather);

  請求頭(Headers):包含客戶端信息(如瀏覽器標(biāo)識、數(shù)據(jù)格式),部分接口需通過請求頭驗(yàn)證身份(如Authorization令牌);

  請求參數(shù):GET 請求的參數(shù)通常拼接在 URL 后(如?city=beijing&date=20250828),POST 請求的參數(shù)多放在請求體(Body)中,格式可分為表單(Form Data)、JSON 等;

  響應(yīng):服務(wù)器返回的結(jié)果,包含狀態(tài)碼(如 200 表示成功、404 表示資源不存在)、響應(yīng)頭、響應(yīng)體(業(yè)務(wù)數(shù)據(jù),多為 JSON 或 HTML 格式)。

  二、requests 庫的安裝與基礎(chǔ)使用

  requests是 Python 第三方庫,需先安裝才能使用,其核心優(yōu)勢是 “語法簡潔、功能全面”,支持所有 HTTP 請求方法,且自動(dòng)處理 Cookie、會(huì)話保持等細(xì)節(jié)。

  (一)安裝 requests 庫

  通過 Python 包管理工具pip安裝,命令如下(適用于 Windows、Linux、Mac):

  TypeScript取消自動(dòng)換行復(fù)制

  pip install requests

  安裝完成后,在 Python 腳本中導(dǎo)入庫即可使用:

  TypeScript取消自動(dòng)換行復(fù)制

  import requests

  (二)基礎(chǔ)請求流程

  使用requests發(fā)送 HTTP 請求的通用流程為:

  構(gòu)造請求參數(shù)(URL、方法、 headers、參數(shù)等);

  調(diào)用requests對應(yīng)的方法發(fā)送請求;

  解析響應(yīng)結(jié)果(狀態(tài)碼、響應(yīng)體等)。

  示例:發(fā)送最簡單的 GET 請求,獲取百度首頁內(nèi)容

  TypeScript取消自動(dòng)換行復(fù)制

  import requests

  # 1. 發(fā)送GET請求

  response = requests.get("https://www.baidu.com")

  # 2. 解析響應(yīng)

  print("狀態(tài)碼:", response.status_code) # 輸出:200(表示請求成功)

  print("響應(yīng)體前100字符:", response.text[:100]) # 輸出HTML內(nèi)容片段

python4.png

  三、requests 庫常用方法及實(shí)戰(zhàn)示例

  requests庫為不同 HTTP 請求方法提供了對應(yīng)的函數(shù),核心常用方法包括get()、post()、put()、delete(),其中g(shù)et()和post()覆蓋 80% 以上的業(yè)務(wù)場景。

  (一)GET 請求:獲取資源(requests.get())

  GET 請求用于從服務(wù)器獲取資源,參數(shù)通常通過 URL 傳遞,適用于查詢數(shù)據(jù)(如獲取天氣、查詢用戶信息)。

  1. 基礎(chǔ)用法:帶 URL 參數(shù)的 GET 請求

  若需傳遞參數(shù)(如查詢 “北京” 的天氣),可通過params參數(shù)傳入字典,requests會(huì)自動(dòng)將參數(shù)拼接為 URL 查詢字符串(?city=北京&key=xxx)。

  示例:調(diào)用模擬天氣 API 獲取北京天氣

  TypeScript取消自動(dòng)換行復(fù)制

  import requests

  # 1. 配置請求參數(shù)

  url = "https://api.example.com/weather" # 目標(biāo)API地址

  params = {

  "city": "北京", # 查詢的城市

  "key": "abc123" # API密鑰(通常由接口提供方分配)

  }

  # 2. 發(fā)送GET請求

  response = requests.get(url, params=params)

  # 3. 解析響應(yīng)(假設(shè)響應(yīng)體為JSON格式)

  if response.status_code == 200: # 200表示請求成功

  weather_data = response.json() # 將JSON響應(yīng)體轉(zhuǎn)為Python字典

  print("城市:", weather_data["city"])

  print("溫度:", weather_data["temp"])

  print("天氣:", weather_data["desc"])

  else:

  print(f"請求失敗,狀態(tài)碼:{response.status_code}")

  2. 進(jìn)階用法:自定義請求頭

  部分 API 要求在請求頭中攜帶客戶端信息(如User-Agent模擬瀏覽器,Authorization傳遞令牌),可通過headers參數(shù)配置。

  示例:帶自定義 headers 的 GET 請求

  TypeScript取消自動(dòng)換行復(fù)制

  import requests

  url = "https://api.example.com/user/123" # 查詢ID為123的用戶信息

  headers = {

  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0", # 模擬Chrome瀏覽器

  "Authorization": "Bearer abcdef123456" # 身份令牌(JWT格式)

  }

  response = requests.get(url, headers=headers)

  if response.status_code == 200:

  print("用戶信息:", response.json())

  (二)POST 請求:提交資源(requests.post())

  POST 請求用于向服務(wù)器提交數(shù)據(jù)(如提交表單、創(chuàng)建用戶、上傳文件),參數(shù)通常放在請求體中,安全性高于 GET(參數(shù)不暴露在 URL 中)。requests.post()支持多種請求體格式,最常用的是 “表單數(shù)據(jù)” 和 “JSON 數(shù)據(jù)”。

  1. 提交表單數(shù)據(jù)(Form Data)

  適用于模擬 HTML 表單提交(如登錄、注冊),需將參數(shù)通過data參數(shù)傳入字典,requests會(huì)自動(dòng)設(shè)置請求頭Content-Type: application/x-www-form-urlencoded。

  示例:模擬用戶登錄(提交用戶名和密碼)

  TypeScript取消自動(dòng)換行復(fù)制

  import requests

  url = "https://api.example.com/login" # 登錄接口地址

  data = {

  "username": "test_user",

  "password": "123456"

  }

  # 發(fā)送POST請求,提交表單數(shù)據(jù)

  response = requests.post(url, data=data)

  if response.status_code == 200:

  result = response.json()

  print("登錄結(jié)果:", result["message"])

  print("登錄令牌:", result["token"]) # 登錄成功后獲取的身份令牌,后續(xù)請求需攜帶

  else:

  print("登錄失?。?quot;, response.text)

  2. 提交 JSON 數(shù)據(jù)(JSON Payload)

  適用于前后端分離項(xiàng)目的 API 交互(如創(chuàng)建訂單、更新用戶信息),需將參數(shù)通過json參數(shù)傳入字典,requests會(huì)自動(dòng)設(shè)置請求頭Content-Type: application/json,并將字典轉(zhuǎn)為 JSON 字符串。

  示例:創(chuàng)建新用戶(提交 JSON 格式數(shù)據(jù))

  TypeScript取消自動(dòng)換行復(fù)制

  import requests

  url = "https://api.example.com/users" # 創(chuàng)建用戶的接口

  headers = {

  "Authorization": "Bearer abcdef123456" # 需攜帶登錄后的令牌

  }

  user_data = {

  "name": "張三",

  "age": 25,

  "email": "zhangsan@example.com"

  }

  # 發(fā)送POST請求,提交JSON數(shù)據(jù)

  response = requests.post(url, headers=headers, json=user_data)

  if response.status_code == 201: # 201表示資源創(chuàng)建成功

  new_user = response.json()

  print("新用戶ID:", new_user["id"])

  print("創(chuàng)建時(shí)間:", new_user["create_time"])

  3. 上傳文件(Multipart/Form-Data)

  若需上傳文件(如圖片、文檔),需通過files參數(shù)傳入字典,requests會(huì)自動(dòng)設(shè)置請求頭Content-Type: multipart/form-data,適用于頭像上傳、文件提交等場景。

  示例:上傳圖片文件

  TypeScript取消自動(dòng)換行復(fù)制

  import requests

  url = "https://api.example.com/upload" # 文件上傳接口

  headers = {

  "Authorization": "Bearer abcdef123456"

  }

  files = {

  # "file"為接口要求的參數(shù)名,open()打開文件,指定文件類型(image/jpeg)

  "file": ("test.jpg", open("test.jpg", "rb"), "image/jpeg")

  }

  # 發(fā)送POST請求,上傳文件

  response = requests.post(url, headers=headers, files=files)

  if response.status_code == 200:

  upload_result = response.json()

  print("文件URL:", upload_result["file_url"]) # 上傳后文件的訪問地址

  (三)其他常用方法:PUT、delete

  除 GET 和 POST 外,requests還支持 PUT(更新資源)、delete(刪除資源)等方法,用法與 GET/POST 類似,僅需調(diào)用對應(yīng)的函數(shù)并傳遞參數(shù)。

  1. PUT 請求:更新資源(requests.put())

  適用于全量更新資源(如修改用戶的所有信息),參數(shù)傳遞方式與 POST 類似(支持data或json)。

  示例:更新用戶信息(全量更新)

  TypeScript取消自動(dòng)換行復(fù)制

  import requests

  url = "https://api.example.com/users/123" # 要更新的用戶ID為123

  headers = {

  "Authorization": "Bearer abcdef123456"

  }

  update_data = {

  "name": "張三_更新",

  "age": 26,

  "email": "zhangsan_update@example.com"

  }

  # 發(fā)送PUT請求,更新用戶信息

  response = requests.put(url, headers=headers, json=update_data)

  if response.status_code == 200:

  print("更新結(jié)果:", response.json()["message"]) # 輸出:"用戶信息更新成功"

  2. delete 請求:刪除資源(requests.delete())

  適用于刪除資源(如刪除用戶、刪除訂單),通常僅需傳遞 URL 和必要的請求頭(如身份令牌)。

  示例:刪除用戶(ID 為 123)

  TypeScript取消自動(dòng)換行復(fù)制

  import requests

  url = "https://api.example.com/users/123" # 要?jiǎng)h除的用戶ID為123

  headers = {

  "Authorization": "Bearer abcdef123456"

  }

  # 發(fā)送delete請求,刪除用戶

  response = requests.delete(url, headers=headers)

  if response.status_code == 204: # 204表示資源刪除成功,無響應(yīng)體

  print("用戶刪除成功")

  else:

  print("刪除失?。?quot;, response.text)

  四、requests 庫的進(jìn)階技巧

  在實(shí)際開發(fā)中,還需處理超時(shí)控制、會(huì)話保持、異常捕獲等場景,requests提供了對應(yīng)的功能滿足需求。

  (一)設(shè)置請求超時(shí)

  為避免請求因網(wǎng)絡(luò)問題長期阻塞,可通過timeout參數(shù)設(shè)置超時(shí)時(shí)間(單位:秒),超時(shí)后會(huì)拋出requests.exceptions.Timeout異常。

  示例:設(shè)置 5 秒超時(shí)

  TypeScript取消自動(dòng)換行復(fù)制

  import requests

  try:

  response = requests.get("https://api.example.com/weather", params={"city": "北京"}, timeout=5)

  print("請求成功")

  except requests.exceptions.Timeout:

  print("請求超時(shí),需檢查網(wǎng)絡(luò)或接口狀態(tài)")

  (二)會(huì)話保持(Session)

  若需多次請求同一域名(如登錄后多次調(diào)用接口),使用requests.Session()可保持會(huì)話狀態(tài)(自動(dòng)保存 Cookie),避免每次請求都重新驗(yàn)證身份,提升效率。

  示例:使用 Session 保持登錄狀態(tài)

  TypeScript取消自動(dòng)換行復(fù)制

  import requests

  # 創(chuàng)建Session對象

  session = requests.Session()

  # 1. 第一步:登錄(Session會(huì)自動(dòng)保存Cookie)

  login_url = "https://api.example.com/login"

  session.post(login_url, data={"username": "test_user", "password": "123456"})

  # 2. 第二步:調(diào)用需要登錄的接口(無需再次傳遞密碼,Session自動(dòng)攜帶Cookie)

  user_info_url = "https://api.example.com/user/info"

  response = session.get(user_info_url)

  print("用戶信息:", response.json())

  # 3. 第三步:關(guān)閉Session

  session.close()

  (三)異常捕獲

  HTTP 請求可能因網(wǎng)絡(luò)錯(cuò)誤、接口錯(cuò)誤等拋出異常,需通過try-except捕獲常見異常(如Timeout、ConnectionError、HTTPError),確保程序穩(wěn)定運(yùn)行。

  示例:完整的異常捕獲

  TypeScript取消自動(dòng)換行復(fù)制

  import requests

  from requests.exceptions import Timeout, ConnectionError, HTTPError

  try:

  response = requests.get("https://api.example.com/weather", params={"city": "北京"}, timeout=5)

  response.raise_for_status() # 若狀態(tài)碼非200(如404、500),拋出HTTPError異常

  print("天氣數(shù)據(jù):", response.json())

  except Timeout:

  print("請求超時(shí)")

  except ConnectionError:

  print("網(wǎng)絡(luò)連接錯(cuò)誤(如域名不存在、服務(wù)器不可達(dá))")

  except HTTPError as e:

  print(f"接口返回錯(cuò)誤,狀態(tài)碼:{e.response.status_code}")

  except Exception as e:

  print(f"其他未知錯(cuò)誤:{str(e)}")

  掌握requests庫的使用,能讓你輕松實(shí)現(xiàn) Python 與 HTTP 服務(wù)的交互,無論是對接第三方 API、開發(fā)前后端分離項(xiàng)目,還是實(shí)現(xiàn)數(shù)據(jù)爬取,都能高效完成需求,是 Python 開發(fā)的必備技能之一。

 


猜你喜歡