gpt4 book ai didi

python - Python 请求的 Curl 命令 - 不起作用

转载 作者:行者123 更新时间:2023-12-01 07:36:35 25 4
gpt4 key购买 nike

我正在尝试将以下curl(工作正常)转换为Python代码:

curl -X POST https://api.example.com/c \
-H 'Authorization: Bearer {token}' \
-H 'content-type: multipart/form-data' \
-F 'attachment[c_id]=1111' \
-F 'attachment[file]=@file.png'

我尝试了两种不同的选择:

选项#1:

import requests

headers = {
'Authorization': 'Bearer {token}',
'content-type': 'multipart/form-data',
}

files = {
'attachment[c_id]': (None, '1111'),
'attachment[file]': ('file.png', open('file.png', 'rb')),
}

response = requests.post('https://api.example.com/c',
headers=headers, files=files)

选项#2:

import requests
from requests_toolbelt.multipart.encoder import MultipartEncoder

headers = {
'Authorization': 'Bearer {token}',
'content-type': 'multipart/form-data',
}

multipart_data = MultipartEncoder(
fields=(
('attachment[file]', open('file.png', 'rb')),
('attachment[c_id]', '1111')
))

response = requests.post('https://api.example.com/c',
headers=headers, data=multipart_data)

两个选项均失败并出现以下错误:

requests.exceptions.ConnectionError: ('Connection aborted.', BrokenPipeError(32, 'Broken pipe'))

所以,这意味着 Python 代码以不同的方式工作,因为curl 工作得很好。

我已经尝试过https://curl.trillworks.com/ - 不幸的是,这没有帮助。我怎样才能在 Python 上做同样的事情?

最佳答案

我刚刚找到了解决方案 - 问题出在 Content-Type header 中。

重要提示:当我们使用“files”参数进行请求时,我们不应该使用 Content-Type header ,请求会自行设置它(有效负载的大小应在此范围内) header,请求库会自动添加此信息)。

下面的代码工作得很好:

import requests

headers = {
'Authorization': 'Bearer {token}',
}

files = (
('attachment[c_id]', (None, '1111')),
('attachment[file]', ('file.png', open('file.png', 'rb')))
)

response = requests.post('https://api.example.com/c',
headers=headers, files=files)

关于python - Python 请求的 Curl 命令 - 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56968019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com