gpt4 book ai didi

python-2.7 - Python 请求 : How can I properly submit a multipart/form POST using a file name

转载 作者:太空宇宙 更新时间:2023-11-03 20:37:45 25 4
gpt4 key购买 nike

我已经查看了与 Python 中的多部分/表单 POST 请求相关的其他问题,但不幸的是,它们似乎没有解决我的确切问题。基本上,我通常使用 CURL 来访问 API 服务,该服务允许我上传 zip 文件以创建 HTML5 资源。我使用的 CURL 命令如下所示:

curl -X POST -H“授权:api:222111”--form“type=html”--form“file=Folder1/Folder2/example.zip”“https://example.api.com/upload?ins_id=123

我正在尝试使用 python 脚本迭代 zip 文件的文件夹,以便上传所有这些文件并接收返回的“媒体 ID”。这就是我的脚本的样子:

import os
import requests
import json


ins_id = raw_input("Please enter your member ID: ")
auth = raw_input("Please enter your API authorization token: ")

for filename in os.listdir("zips"):
if filename.endswith(".zip"):
file_path = os.path.abspath(filename)
url = "https://example.api.com/upload?
ins_id="+str(ins_id)
header = {"Authorization": auth}
response = requests.post(url, headers=header, files={"form_type":
(None, "html"), "form_file_upload": (None, str(file_path))})
api_response = response.json()
print api_response

此 API 服务要求在提交 POST 时包含文件路径。但是,当我使用此脚本时,响应指示“未提供文件”。我是否在脚本中正确包含了此信息?

谢谢。

更新:

我认为我现在正朝着正确的方向前进(感谢提供的答案),但现在,我收到一条错误消息,指出“没有这样的文件或目录”。我的想法是,我没有正确使用 os.path,但即使我将代码更改为使用“relpath”,我仍然收到相同的消息。我的脚本位于一个文件夹中,我有一个完全不同的文件夹,名为“zips”(在同一目录中),它是我所有 zip 文件的存储位置。

最佳答案

要使用 request 库上传文件,您可以将文件处理程序直接包含在 JSON 中,如 documentation 中所述。 。这是我从那里获取的相应示例:

url = 'http://httpbin.org/post'
files = {'file': open('path_to_your_file', 'rb')}

r = requests.post(url, files=files)

如果我们将其集成到您的脚本中,它将如下所示(我还使其变得更加Pythonic ):

import os
import requests
import json


folder = 'zips'
ins_id = raw_input("Please enter your member ID: ")
auth = raw_input("Please enter your API authorization token: ")
url = "https://example.api.com/upload?"
header = {"Authorization": auth}

for filename in os.listdir(folder):
if not filename.endswith(".zip"):
continue

file_path = os.path.abspath(os.path.join(folder, filename))
ins_id="+str(ins_id)"
response = requests.post(
url, headers=header,
files={"form_type": (None, "html"),
"form_file_upload": open(file_path, 'rb')}
)
api_response = response.json()
print api_response

由于我没有 API 端点,因此我无法实际测试此代码块 - 但它应该是这样的。

关于python-2.7 - Python 请求 : How can I properly submit a multipart/form POST using a file name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57051322/

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