python - 将 Curl 请求转换为 Python 请求
问题描述
这是我试图更改为我的 python 代码的示例 curl 请求:
curl 'http://127.0.0.1:5985/_api/v2/ws/test2/upload_report' \
-H 'Content-Type: multipart/form-data' \
--cookie "session=.eJw90M2KwjAQB_BXWXL2YGu9CB6UlGJhpgSCZeZS2FpNJ2YXqkI24rtv18O-wO__8VTdeRpuTm3u02NYqG48qc1TfXyqjWK9SyyUYVsWmMrUWDei9Etsj4FaDKydw-Qj5KZo9CWSNUu2uzXktQM5XSnxyJVZgTaRrYkk-xEt5ZQfVmT3DmcfKvrhcBQUKMgeIoQysb0knjMh-QIEliyQQzJZ0-IV_kx7DWDZY1WPmNCD9Fv1Wqj-Np27-7cfvv4noNTSVCZjXSaYK2KgiLqMTTtX1H7daMpmPnLFgtpHSk7YbN_c4zZM7ztUoV6_3rRiDA.DkoypQ.q7eGzh1oof8dKnbF4q6xD_n1d6o" \
--form "file=@PATH/TO/FILE" \
--form "csrf_token=IjYyYzhkNWQxMzA4MTZmMTQxMTliYTA5OTg2NWYzMWRmYzQ5MWM4Y2Ui.Dko4Zw.sZ-LLdGoxaNFUaySFFQMvyLecxc" \
--compressed
我有下面的 python 代码来尝试上传文件?但是 API 返回 400 错误。
CSRF_TOKEN = get_csrf(session,token)
files = {"file": open(os.getcwd()+'/test.xml',"rb")}
data = {"csrf_token": CSRF_TOKEN, "file": os.getcwd() + "/test.xml"}
res = session.post(BASE_URI + '/_api/v2/ws/test2/upload_report', verify=False, files=files, data=data, headers={'Content-Type': 'multipart/form-data'}, cookies={'session':token})
print res.text, res.status_code
pdb.set_trace()
解决方案
不要设置 Content-Type 标头,Multipart/form-data 请求必须包含边界值,并且当您使用files
. 通过手动设置,您实际上要求requests
不要为您处理此问题,并且这样做您违反了要求。
此外,您不需要设置file
两次。在结构中只设置一次files
:
CSRF_TOKEN = get_csrf(session,token)
files = {"file": open(os.getcwd()+'/test.xml',"rb")}
data = {"csrf_token": CSRF_TOKEN}
res = session.post(
BASE_URI + '/_api/v2/ws/test2/upload_report', verify=False,
files=files, data=data,
cookies={'session': token})
我还将文件对象作为上下文管理器打开,以便在收到响应时将其关闭:
CSRF_TOKEN = get_csrf(session,token)
data = {"csrf_token": CSRF_TOKEN}
with open('test.xml', "rb") as file_to_post:
files = {"file": file_to_post}
res = session.post(
BASE_URI + '/_api/v2/ws/test2/upload_report', verify=False,
files=files, data=data,
cookies={'session': token})
您根本不需要使用os.getcwd()
,无论如何,任何相对路径都将针对当前工作目录进行解析。
推荐阅读
- c# - 如何限制控制台输入
- mongodb - 在 mongoDB 中使用正则表达式匹配获取数据
- python - 训练时出错:tensorflow:您的输入没有数据;中断训练
- javascript - 如何在 grecaptcha.execute() 之后等到用户完成任务?reCAPTCHA v2 不可见
- css - 使用 cicerone 查找 CSS 以修改 tabPanel 的突出显示
- dataweave - 使用 DataWeave 迭代对象数组
- python - 有没有办法将嵌套的 json 数组转换为多个数组?
- c# - 带有 COM 对象的 Asp.NET CORE WEB API
- git-merge - 压缩和合并父分支后如何自动将所有子分支重新定位到主分支?
- amazon-web-services - 尽管在提供程序中定义了错误区域,但 Terraform 导入失败