Python發(fā)送HTTP請(qǐng)求的不同方式與參數(shù)差別詳解
想象一下,你在餐廳點(diǎn)菜。你可以:
- GET:像服務(wù)員大聲報(bào)出你想要的菜(所有人都能聽到)
- POST:像把寫好的菜單悄悄遞給服務(wù)員(內(nèi)容不公開)
這就是HTTP請(qǐng)求中最常見的兩種方式,讓我們用Python來探索它們的差別。
最常用的兩種請(qǐng)求方式
1. GET請(qǐng)求 - 從服務(wù)器"獲取"數(shù)據(jù)
就像在瀏覽器地址欄輸入網(wǎng)址一樣,所有參數(shù)都顯示在URL中。
import requests
# 基本GET請(qǐng)求
response = requests.get('https://api.example.com/users')
# 帶查詢參數(shù)的GET請(qǐng)求
params = {
'page': 2,
'limit': 10,
'search': 'python'
}
response = requests.get('https://api.example.com/users', params=params)
# 最終請(qǐng)求的URL會(huì)是:https://api.example.com/users?page=2&limit=10&search=python
print(response.url)
特點(diǎn):
- 參數(shù)在URL中可見(像明信片)
- 有長度限制
- 適合獲取數(shù)據(jù)
- 可以被緩存、收藏
2. POST請(qǐng)求 - 向服務(wù)器"提交"數(shù)據(jù)
像填寫表單后提交,數(shù)據(jù)放在請(qǐng)求體中,不在URL中顯示。
import requests
# 提交表單數(shù)據(jù)
form_data = {
'username': 'john_doe',
'email': 'john@example.com'
}
response = requests.post('https://api.example.com/register', data=form_data)
# 提交JSON數(shù)據(jù)(現(xiàn)代API常用)
json_data = {
'product': 'laptop',
'price': 999.99,
'features': ['16GB RAM', '512GB SSD']
}
response = requests.post('https://api.example.com/products', json=json_data)
特點(diǎn):
- 數(shù)據(jù)在請(qǐng)求體中(像信封內(nèi)的信)
- 無長度限制
- 適合創(chuàng)建/更新數(shù)據(jù)
- 更安全(不暴露在URL中)
其他請(qǐng)求方式
# PUT - 更新/替換整個(gè)資源
requests.put('https://api.example.com/users/123', json={'name': 'new_name'})
# PATCH - 部分更新資源
requests.patch('https://api.example.com/users/123', json={'email': 'new@email.com'})
# DELETE - 刪除資源
requests.delete('https://api.example.com/users/123')
參數(shù)傳遞的三種主要方式
1. 查詢參數(shù) (Query Parameters)
# 在URL中傳遞
requests.get('https://api.example.com/search?q=python&sort=newest')
# 或使用params參數(shù)(推薦)
params = {'q': 'python', 'sort': 'newest'}
requests.get('https://api.example.com/search', params=params)
2. 表單數(shù)據(jù) (Form Data)
# 類似HTML表單提交
form_data = {'username': 'user', 'password': 'pass'}
requests.post(url, data=form_data)
3. JSON數(shù)據(jù)
# 現(xiàn)代API最常用的方式
json_data = {'name': 'John', 'age': 30}
requests.post(url, json=json_data)
# 注意:使用json參數(shù)會(huì)自動(dòng)設(shè)置Content-Type為application/json
實(shí)際應(yīng)用示例:創(chuàng)建一個(gè)用戶
import requests
def create_user(user_data):
url = 'https://api.example.com/users'
try:
# 使用POST發(fā)送JSON數(shù)據(jù)
response = requests.post(url, json=user_data, timeout=10)
# 檢查請(qǐng)求是否成功
response.raise_for_status()
# 解析JSON響應(yīng)
result = response.json()
print(f"用戶創(chuàng)建成功!用戶ID: {result['id']}")
return result
except requests.exceptions.RequestException as e:
print(f"創(chuàng)建用戶失敗: {e}")
return None
# 使用函數(shù)
new_user = {
'name': '張三',
'email': 'zhangsan@example.com',
'role': 'admin'
}
create_user(new_user)
如何選擇正確的請(qǐng)求方式
| 場(chǎng)景 | 推薦方法 | 示例 |
|---|---|---|
| 獲取數(shù)據(jù) | GET | 獲取用戶列表 |
| 創(chuàng)建新資源 | POST | 注冊(cè)新用戶 |
| 更新整個(gè)資源 | PUT | 替換用戶所有信息 |
| 部分更新資源 | PATCH | 只更新用戶郵箱 |
| 刪除資源 | DELETE | 刪除用戶賬戶 |
小貼士
安全性:永遠(yuǎn)不要在GET請(qǐng)求中傳遞密碼等敏感信息
API文檔:總是先閱讀API文檔,了解它期望的請(qǐng)求方式和參數(shù)格式
錯(cuò)誤處理:總是檢查響應(yīng)狀態(tài)碼
if response.status_code == 200:
print("成功!")
elif response.status_code == 404:
print("資源未找到")
現(xiàn)在你已經(jīng)掌握了Python中不同HTTP請(qǐng)求方式的使用方法和區(qū)別!就像學(xué)會(huì)了不同的溝通方式,你可以根據(jù)不同的場(chǎng)景選擇最合適的請(qǐng)求方法。
到此這篇關(guān)于Python發(fā)送HTTP請(qǐng)求的不同方式與參數(shù)差別詳解的文章就介紹到這了,更多相關(guān)Python發(fā)送HTTP請(qǐng)求內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
30分鐘搭建Python的Flask框架并在上面編寫第一個(gè)應(yīng)用
這篇文章主要介紹了如何搭建Python的Flask框架并在上面編寫一個(gè)簡單的登錄模版應(yīng)用,代碼數(shù)量少、充分體現(xiàn)了Flask框架的輕量與開發(fā)高效的特點(diǎn),需要的朋友可以參考下2015-03-03
python執(zhí)行等待程序直到第二天零點(diǎn)的方法
這篇文章主要介紹了python執(zhí)行等待程序直到第二天零點(diǎn)的方法,涉及Python等待程序的實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-04-04
Python中json.dumps()函數(shù)使用和示例
這篇文章主要介紹了Python中json.dumps()函數(shù)使用和示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
Python使用cookielib模塊操作cookie的實(shí)例教程
cookielib模塊經(jīng)常被用來和urllib等模塊配合來制作爬蟲或者第三方SNS客戶端等程序,比如這里我們就將舉一個(gè)使用cookie來發(fā)送登錄信息登錄人人網(wǎng)的例子,well,一起來看一下Python使用cookielib模塊操作cookie的實(shí)例教程2016-07-07
Python使用zmail進(jìn)行郵件發(fā)送的示例詳解
這篇文章主要為大家詳細(xì)介紹了Python如何使用zmail進(jìn)行郵件發(fā)送功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考一下2024-03-03
優(yōu)化Python代碼使其加快作用域內(nèi)的查找
這篇文章主要介紹了優(yōu)化Python代碼使其加快作用域內(nèi)的搜索,文中介紹了CPython相關(guān)的C代碼來對(duì)查找功能進(jìn)行優(yōu)化,加快搜索的速度,需要的朋友可以參考下2015-03-03
Pytorch如何加載自己的數(shù)據(jù)集(使用DataLoader讀取Dataset)
這篇文章主要介紹了Pytorch如何加載自己的數(shù)據(jù)集(使用DataLoader讀取Dataset)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
Python開發(fā)的實(shí)用計(jì)算器完整實(shí)例
這篇文章主要介紹了Python開發(fā)的實(shí)用計(jì)算器,結(jié)合完整實(shí)例形式分析了Python實(shí)現(xiàn)計(jì)算器四則運(yùn)算、開方、取余等相關(guān)操作技巧,需要的朋友可以參考下2017-05-05

