我正在嘗試使用此功能將檔案上傳到某些 api:
def upload_avatar(cred, file):
headers = {'accept': '*/*', 'Content-Type': 'multipart/form-data', 'Authorization': f'Bearer {cred}'}
files = { 'UploadForm[avatar]': ('image1.jpg', open('image1.jpg', 'rb'), 'image/jpg')}
signup_req = requests.post(api_enpoint "/profile/avatar", headers=headers, files=files)
signup_req.raise_for_status()
并得到 422 Client Error: Unprocessable entity for url: https://api_endpoint/v1/profile/avatar
雖然 CURL 命令作業正常:
curl -v -X POST "https://api_endpoint/v1/profile/avatar" -H "accept: */*" -H "Content-Type: multipart/form-data" -H "Authorization: Bearer SAME_LONG_TOKEN" -F "UploadForm[avatar][email protected];type=image/jpeg"
有什么不同?
uj5u.com熱心網友回復:
您可以洗掉標題:
Accept: */*Content-Type: multipart/form-data
requests當您使用它的json, data, fileskwargs時,它會自行處理它……如果您指定它們,它似乎會嚇壞它。
我使用httpbin來比較curl和requestsHTTP 請求的內容,它是一個方便的工具。
因此,對于您的示例,它將是:
headers = {'Authorization': f'Bearer {cred}'}
files = {'UploadForm[avatar]': ('image1.jpg', open('image1.jpg', 'rb'), 'image/jpeg')}
signup_req = requests.post('https://httpbin.org/post', headers=headers, files=files)
uj5u.com熱心網友回復:
試試這個
import requests
def upload_avatar(cred, file):
url = "https://api_endpoint/v1/profile/avatar"
files = [
(
'UploadForm[avatar]',
('image1.jpg', open('image1.jpg', 'rb'),
'application/octet-stream'))
]
headers = {
'accept': '*/*',
'Authorization': 'Bearer SAME_LONG_TOKEN',
'Content-Type': 'multipart/form-data',
'Authorization': f'Bearer {cred}'
}
response = requests.request("POST", url, headers=headers, files=files)
print(response.text)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/396433.html
