怎樣用Python發(fā)送HTTP請(qǐng)求?

python中,發(fā)送http請(qǐng)求主要使用requests庫。1)使用requests.get()發(fā)送get請(qǐng)求;2)使用requests.post()發(fā)送post請(qǐng)求;3)處理響應(yīng)狀態(tài)碼;4)解析json數(shù)據(jù);5)處理異常;6)設(shè)置請(qǐng)求頭;7)處理認(rèn)證;8)使用會(huì)話提高效率;9)設(shè)置超時(shí)時(shí)間;10)記錄日志;11)設(shè)置代理。通過這些方法和最佳實(shí)踐,可以高效地與api交互。

怎樣用Python發(fā)送HTTP請(qǐng)求?

python中發(fā)送HTTP請(qǐng)求是一項(xiàng)常見且強(qiáng)大的功能,它讓我們能夠與互聯(lián)網(wǎng)上的各種服務(wù)進(jìn)行交互。無論你是想要從某個(gè)API獲取數(shù)據(jù),還是需要向某個(gè)服務(wù)器發(fā)送數(shù)據(jù),Python都提供了多種方法來實(shí)現(xiàn)這一目標(biāo)。今天,我就來詳細(xì)聊聊如何用Python發(fā)送HTTP請(qǐng)求,以及在這一過程中需要注意的各種細(xì)節(jié)和最佳實(shí)踐。

在Python中,最常用的庫來發(fā)送HTTP請(qǐng)求是requests。這個(gè)庫以其簡(jiǎn)潔和易用性著稱,深受開發(fā)者的喜愛。不過,Python標(biāo)準(zhǔn)庫中也提供了http.client模塊,雖然它不如requests那樣直觀,但對(duì)于某些特定的需求,它也是一個(gè)不錯(cuò)的選擇。

讓我們先來看一個(gè)簡(jiǎn)單的例子,使用requests庫發(fā)送一個(gè)GET請(qǐng)求:

立即學(xué)習(xí)Python免費(fèi)學(xué)習(xí)筆記(深入)”;

import requests  response = requests.get('https://api.github.com') print(response.status_code) print(response.text)

這個(gè)代碼片段向github的API發(fā)送了一個(gè)GET請(qǐng)求,并打印出響應(yīng)的狀態(tài)碼和內(nèi)容。requests庫的美妙之處在于,它將復(fù)雜的HTTP協(xié)議細(xì)節(jié)隱藏起來,讓我們可以專注于業(yè)務(wù)邏輯。

當(dāng)然,HTTP請(qǐng)求不僅僅是GET請(qǐng)求,POST、PUT、delete等方法也是常用的。讓我們看一個(gè)POST請(qǐng)求的例子:

import requests  data = {'key': 'value'} response = requests.post('https://httpbin.org/post', data=data) print(response.status_code) print(response.json())

在這個(gè)例子中,我們向httpbin.org發(fā)送了一個(gè)POST請(qǐng)求,并傳遞了一些數(shù)據(jù)。httpbin.org是一個(gè)非常有用的測(cè)試網(wǎng)站,它會(huì)返回我們發(fā)送的數(shù)據(jù),讓我們可以驗(yàn)證請(qǐng)求是否成功。

在使用HTTP請(qǐng)求時(shí),有幾個(gè)關(guān)鍵點(diǎn)需要注意:

  1. 處理響應(yīng)狀態(tài)碼:每個(gè)HTTP請(qǐng)求都會(huì)返回一個(gè)狀態(tài)碼,200表示請(qǐng)求成功,404表示資源未找到,500表示服務(wù)器錯(cuò)誤等。我們需要根據(jù)狀態(tài)碼來處理不同的情況。比如:
import requests  response = requests.get('https://api.github.com/invalid') if response.status_code == 200:     print('請(qǐng)求成功:', response.json()) elif response.status_code == 404:     print('資源未找到') else:     print('其他錯(cuò)誤:', response.status_code)
  1. 處理JSON數(shù)據(jù):很多API會(huì)返回JSON格式的數(shù)據(jù),requests庫提供了方便的方法來解析JSON:
import requests  response = requests.get('https://api.github.com') if response.status_code == 200:     data = response.json()     print('用戶數(shù)量:', data['total_users'])
  1. 處理異常:網(wǎng)絡(luò)請(qǐng)求可能會(huì)失敗,我們需要處理這些異常情況:
import requests  try:     response = requests.get('https://api.github.com', timeout=5)     response.raise_for_status()     print('請(qǐng)求成功:', response.json()) except requests.exceptions.RequestException as e:     print('請(qǐng)求失敗:', e)
  1. 設(shè)置請(qǐng)求頭:有時(shí)候我們需要設(shè)置請(qǐng)求頭,比如設(shè)置User-Agent來模擬瀏覽器
import requests  headers = {     'User-Agent': 'Mozilla/5.0 (windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3' } response = requests.get('https://httpbin.org/headers', headers=headers) print(response.json())
  1. 處理認(rèn)證:有些API需要認(rèn)證,我們可以使用requests庫的認(rèn)證功能:
import requests from requests.auth import HTTPBasicAuth  response = requests.get('https://api.github.com/user', auth=HTTPBasicAuth('username', 'password')) print(response.json())

在實(shí)際應(yīng)用中,使用HTTP請(qǐng)求時(shí)還需要注意一些最佳實(shí)踐:

  • 使用會(huì)話:如果需要發(fā)送多個(gè)請(qǐng)求到同一個(gè)服務(wù)器,使用requests.Session()可以提高效率,因?yàn)樗鼤?huì)保持連接狀態(tài):
import requests  with requests.Session() as session:     response1 = session.get('https://httpbin.org/cookies/set/sessioncookie/123456789')     response2 = session.get('https://httpbin.org/cookies')     print(response2.json())
  • 超時(shí)設(shè)置:設(shè)置超時(shí)時(shí)間可以防止程序因?yàn)榈却憫?yīng)時(shí)間過長(zhǎng)而卡死:
import requests  response = requests.get('https://api.github.com', timeout=10) print(response.status_code)
  • 日志記錄:記錄請(qǐng)求和響應(yīng)日志有助于調(diào)試和監(jiān)控:
import requests import logging  logging.basicConfig(level=logging.DEBUG) response = requests.get('https://api.github.com')
  • 代理設(shè)置:在某些網(wǎng)絡(luò)環(huán)境下,需要通過代理訪問互聯(lián)網(wǎng):
import requests  proxies = {     'http': 'http://10.10.1.10:3128',     'https': 'http://10.10.1.10:1080', } response = requests.get('https://api.github.com', proxies=proxies) print(response.status_code)

總的來說,使用Python發(fā)送HTTP請(qǐng)求是一個(gè)非常靈活且強(qiáng)大的工具。通過requests庫,我們可以輕松地與各種API進(jìn)行交互,獲取和發(fā)送數(shù)據(jù)。在實(shí)際應(yīng)用中,注意處理各種異常情況,優(yōu)化請(qǐng)求性能,以及遵循最佳實(shí)踐,可以讓我們的代碼更加健壯和高效。

希望這篇文章能幫助你更好地理解和使用Python發(fā)送HTTP請(qǐng)求。如果你在實(shí)踐中遇到任何問題,歡迎隨時(shí)討論和分享經(jīng)驗(yàn)!

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊13 分享