Python多種介面請求方式示例

武穆逸仙發表於2024-08-09
  1. 傳送JSON資料

如果你需要傳送JSON資料,可以使用json引數。這會自動設定Content-Type為application/json。


import requests
import json
url = 'http://example.com/api/endpoint'
data = {
    "key": "value",
    "another_key": "another_value"
}
headers = {'Content-Type': 'application/json'}
response = requests.post(url, data=json.dumps(data), headers=headers)
print(response.status_code)
print(response.json())

  1. 傳送表單資料 (Form Data)

如果你需要傳送表單資料,可以使用data引數。這會自動設定Content-Type為application/x-www-form-urlencoded。


import requests
url = 'http://example.com/api/endpoint'
data = {
    "key": "value",
    "another_key": "another_value"
}
response = requests.post(url, data=data)
print(response.status_code)
print(response.text)

  1. 傳送檔案 (Multipart Form Data)

當你需要上傳檔案時,通常會使用files引數。這會設定Content-Type為multipart/form-data。


import requests
url = 'http://example.com/api/upload'
file = {'file': ('image.png', open('image.png', 'rb'))}
data = {
    'biz': 'temp',
    'needCompress': 'true'
}
response = requests.post(url, data=data, files=file)
print(response.status_code)
print(response.text)

  1. 傳送帶有認證資訊的請求

如果API需要認證資訊,可以在請求中新增auth引數。


import requests
url = 'http://example.com/api/endpoint'
username = 'your_username'
password = 'your_password'
response = requests.get(url, auth=(username, password))
print(response.status_code)
print(response.text)

  1. 處理重定向

你可以選擇是否允許重定向,預設情況下requests會自動處理重定向。


import requests
url = 'http://example.com/api/endpoint'
allow_redirects = False
response = requests.get(url, allow_redirects=allow_redirects)
print(response.status_code)
print(response.history)

  1. 設定超時

你可以設定請求的超時時間,防止長時間等待響應。


import requests
url = 'http://example.com/api/endpoint'
timeout = 5
try:
    response = requests.get(url, timeout=timeout)
    print(response.status_code)
except requests.exceptions.Timeout:
    print("The request timed out")

  1. 使用Cookies

如果你需要傳送或接收cookies,可以透過cookies引數來實現。


import requests
url = 'http://example.com/api/endpoint'
cookies = {'session': '1234567890'}
response = requests.get(url, cookies=cookies)
print(response.status_code)
print(response.cookies)

  1. 自定義Headers

除了預設的頭部資訊外,你還可以新增自定義的頭部資訊。


import requests
url = 'http://example.com/api/endpoint'
headers = {
    'User-Agent': 'MyApp/0.0.1',
    'X-Custom-Header': 'My custom header value'
}
response = requests.get(url, headers=headers)
print(response.status_code)
print(response.headers)

  1. 使用SSL驗證

對於HTTPS請求,你可以指定驗證證書的方式。


import requests
url = 'https://example.com/api/endpoint'
verify = True  # 預設情況下,requests會驗證SSL證書
response = requests.get(url, verify=verify)
print(response.status_code)
如果你要跳過SSL驗證,可以將verify設定為False。但請注意,這樣做可能會導致安全問題。
import requests
url = 'https://example.com/api/endpoint'
verify = False
response = requests.get(url, verify=verify)
print(response.status_code)

  1. 上傳多個檔案

有時你可能需要同時上傳多個檔案。你可以透過傳遞多個files字典來實現這一點。


import requests
url = 'http://example.com/api/upload'
files = [
    ('file1', ('image1.png', open('image1.png', 'rb'))),
    ('file2', ('image2.png', open('image2.png', 'rb')))
]
data = {
    'biz': 'temp',
    'needCompress': 'true'
}
response = requests.post(url, data=data, files=files)
print(response.status_code)
print(response.text)

  1. 使用代理

如果你需要透過代理伺服器訪問網際網路,可以使用proxies引數。


import requests
url = 'http://example.com/api/endpoint'
proxies = {
    'http': 'http://10.10.1.10:3128',
    'https': 'http://10.10.1.10:1080',
}
response = requests.get(url, proxies=proxies)
print(response.status_code)

  1. 流式下載大檔案

當下載大檔案時,可以使用流式讀取以避免記憶體不足的問題。


import requests
url = 'http://example.com/largefile.zip'
response = requests.get(url, stream=True)
with open('largefile.zip', 'wb') as f:
    for chunk in response.iter_content(chunk_size=8192):
        if chunk:
            f.write(chunk)

  1. 分塊上傳大檔案

與流式下載類似,你也可以分塊上傳大檔案以避免記憶體問題。


import requests
url = 'http://example.com/api/upload'
file_path = 'path/to/largefile.zip'
chunk_size = 8192
with open(file_path, 'rb') as f:
    for chunk in iter(lambda: f.read(chunk_size), b''):
        files = {'file': ('largefile.zip', chunk)}
        response = requests.post(url, files=files)
        if response.status_code != 200:
            print("Error uploading file:", response.status_code)
            break

  1. 使用Session物件

如果你需要多次請求同一個網站,並且希望保持狀態(例如使用cookies),可以使用Session物件。


import requests
s = requests.Session()
# 設定session的cookies
s.cookies['example_cookie'] = 'example_value'
# 傳送GET請求
response = s.get('http://example.com')
# 傳送POST請求
data = {'key': 'value'}
response = s.post('http://example.com/post', data=data)
print(response.status_code)
  1. 處理錯誤

處理網路請求時,經常會遇到各種錯誤。可以使用異常處理來優雅地處理這些情況。


import requests
url = 'http://example.com/api/endpoint'
try:
    response = requests.get(url)
    response.raise_for_status()  # 如果響應狀態碼不是200,則丟擲HTTPError異常
except requests.exceptions.HTTPError as errh:
    print(f"Http Error: {errh}")
except requests.exceptions.ConnectionError as errc:
    print(f"Error Connecting: {errc}")
except requests.exceptions.Timeout as errt:
    print(f"Timeout Error: {errt}")
except requests.exceptions.RequestException as err:
    print(f"OOps: Something Else: {err}")
  1. 使用認證令牌

許多API使用認證令牌進行身份驗證。你可以將認證令牌作為頭部的一部分傳送。


import requests
url = 'http://example.com/api/endpoint'
token = 'your_auth_token_here'
headers = {
    'Authorization': f'Token {token}'
}
response = requests.get(url, headers=headers)
print(response.status_code)
print(response.json())
  1. 使用OAuth2認證

對於使用OAuth2的API,你需要獲取一個訪問令牌並將其包含在請求頭中。


import requests
# 獲取OAuth2訪問令牌
token_url = 'http://example.com/oauth/token'
data = {
    'grant_type': 'client_credentials',
    'client_id': 'your_client_id',
    'client_secret': 'your_client_secret'
}
response = requests.post(token_url, data=data)
access_token = response.json()['access_token']
# 使用訪問令牌進行請求
api_url = 'http://example.com/api/endpoint'
headers = {
    'Authorization': f'Bearer {access_token}'
}
response = requests.get(api_url, headers=headers)
print(response.status_code)
print(response.json())


來源:https://www.iwmyx.cn/pythondzjkqqfb.html

相關文章