Python發(fā)送HTTP請(qǐng)求的不同方式與參數(shù)差別詳解
想象一下,你在餐廳點(diǎn)菜。你可以:
- GET:像服務(wù)員大聲報(bào)出你想要的菜(所有人都能聽到)
- POST:像把寫好的菜單悄悄遞給服務(wù)員(內(nèi)容不公開)
這就是HTTP請(qǐng)求中最常見的兩種方式,讓我們用Python來(lái)探索它們的差別。
最常用的兩種請(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中可見(像明信片)
- 有長(zhǎng)度限制
- 適合獲取數(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)的信)
- 無(wú)長(zhǎng)度限制
- 適合創(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)文章希望大家以后多多支持腳本之家!
- Python模擬HTTP請(qǐng)求實(shí)現(xiàn)APP自動(dòng)簽到功能
- 使用Python的requests庫(kù)來(lái)發(fā)送HTTP請(qǐng)求的操作指南
- Python requests庫(kù)輕松發(fā)送HTTP請(qǐng)求的終極指南
- Python中如何處理HTTPS請(qǐng)求和SSL證書驗(yàn)證詳解
- python使用requests庫(kù)實(shí)現(xiàn)輕松發(fā)起HTTP請(qǐng)求
- Python如何獲取HTTP請(qǐng)求的Response Body
- Python中的HTTP請(qǐng)求超時(shí)處理方式
相關(guān)文章
Python讀取CSV文件并進(jìn)行數(shù)據(jù)可視化
這篇文章主要為大家詳細(xì)介紹了Python如何讀取CSV文件并進(jìn)行數(shù)據(jù)可視化,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-12-12
Django文件存儲(chǔ) 自己定制存儲(chǔ)系統(tǒng)解析
這篇文章主要介紹了Django文件存儲(chǔ) 自己定制存儲(chǔ)系統(tǒng)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08
python實(shí)現(xiàn)人人對(duì)戰(zhàn)的五子棋游戲
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)人人對(duì)戰(zhàn)的五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05
Python圖像運(yùn)算之圖像點(diǎn)運(yùn)算與灰度化處理詳解
這篇文章主要介紹了圖像點(diǎn)運(yùn)算的灰度化處理的相關(guān)知識(shí),包括各種灰度算法的實(shí)現(xiàn),以及灰度線性變換和灰度非線性變換。需要的可以參考一下2022-02-02
用python寫個(gè)顏值評(píng)分器篩選最美主播
這篇文章主要介紹了我如何用python寫顏值評(píng)分器,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08
Python實(shí)現(xiàn)讀取SQLServer數(shù)據(jù)并插入到MongoDB數(shù)據(jù)庫(kù)的方法示例
這篇文章主要介紹了Python實(shí)現(xiàn)讀取SQLServer數(shù)據(jù)并插入到MongoDB數(shù)據(jù)庫(kù)的方法,涉及Python同時(shí)進(jìn)行SQLServer與MongoDB數(shù)據(jù)庫(kù)的連接、查詢、讀取、寫入等相關(guān)操作實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-06-06
關(guān)于tensorflow中tf.keras.models.Sequential()的用法
這篇文章主要介紹了關(guān)于tensorflow中tf.keras.models.Sequential()的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
使用Python實(shí)現(xiàn)批量修改文件的修改日期功能
在日常的文件管理中,您可能需要批量修改文件的修改日期,比如,您可能希望將某個(gè)文件夾中的所有文件的修改日期隨機(jī)設(shè)置為6到8月份之間的日期,這在數(shù)據(jù)整理中可能非常有用,本文將詳細(xì)介紹如何使用Python實(shí)現(xiàn)這一功能,需要的朋友可以參考下2024-10-10
python腳本實(shí)現(xiàn)音頻m4a格式轉(zhuǎn)成MP3格式的實(shí)例代碼
這篇文章主要介紹了python腳本實(shí)現(xiàn)音頻m4a格式轉(zhuǎn)成MP3格式的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-10-10

