CURL 到 Python 请求 API CALL

问题描述 投票:0回答:1

我正在尝试使用工具将 CURL 命令转换为 python 代码。

这是工具

卷曲命令

curl -X POST -H 'content-type: multipart/form-data' -F 'file=@"image-api.jpg";filename="image_app.png"' -H "Authorization: Bearer eyJpc3MiOiJodHRwczpcL1wvYWNjb3VudHMuc25hcGNoYXQuY29tXC9hY2NvdW50c1wvb2F1dGgyXC90b2tlbiIsInR5cCI6IkpXVCIsImVuYyI6IkExMjhDQkMtSFMyNTYiLCJhbGciOiJkaXIiLCJraWQiOiJhY2Nlc3MtdG9rZW4tYTEyOGNiYy1oczI1Ni4wIn0..s2rMbO22nSfSqhuBwq68QA.Gu0MBlHpBXEdIS89YQSFrgS6nwtZT3NCax004UcjcFzOT_-ioXwoh8mwEethNTmVfY-F21CZ8ceTeAZQbhYiFqN5cWrnk2WX_KIw8Uq-D1jbrwrhqbFshzUMXqCAoJIe9DLzZYXmYdia1l9mMMdiSyyep9dFGzwOgB_FdGDU-fUIuEGEZyXdeyCM_4TDf652JPOHc_ldZmHivpmfa9QacMXjJxrVN0Y10m0_FC6p_q7WPdyVtUYSk1EMmHjIPNUSvRTSjNPLHhfH_WXNWcVPjy07p3bwNYc2uj4Woy-VYci51M4vuWRZrAMs6GO4eQeAu4Z7rKIc_Zhu4CBZcU1yqg4joQFnWUXRi_a_fq1SeeQYrFC_NFX5jgsz7ElCvPd2s0s0rs6FdBTNDPDdM-o2W35a8Ew46KRHrOT2FN6yJyVVI_hrz0hBajsC-BU4u2i90KlV0SKQOOR19t5RuGLJbLXxRdVL_s172CdQwHUejhjuusq_r0JmxtwCVBCEzMcOzdJ-2u7PPEZbsAiVpdS9MJdDQyVQOJ_e0UlIN6qNKhFSKS9-88mFvDS4MmFdenfacBbGJycjgNx_TgIjnpbk2KAYe2-_mKbMkOctxUA-3ZAfpjMF0UUO46csIJEpmmwmUOp5qt4jz2EbSZjvjmyPIxXF38Qv3g-HGBPUQF8vvx0BHd-WkB6Hs86jjXBlplUD8AgIo-YNoIeH4-2umCw6b-DuGFuG3ZTcyzM8P1lrPCg.SOqmXSkT1dNBh4QknnuBXQ" https://adsapi.snapchat.com/v1/media/577e68af-0b9b-4ae6-8bbb-22ac6910557f/upload

Python代码

import requests

headers = {
    'content-type': 'multipart/form-data',
    'Authorization': 'Bearer eyJpc3MiOiJodHRwczpcL1wvYWNjb3VudHMuc25hcGNoYXQuY29tXC9hY2NvdW50c1wvb2F1dGgyXC90b2tlbiIsInR5cCI6IkpXVCIsImVuYyI6IkExMjhDQkMtSFMyNTYiLCJhbGciOiJkaXIiLCJraWQiOiJhY2Nlc3MtdG9rZW4tYTEyOGNiYy1oczI1Ni4wIn0..s2rMbO22nSfSqhuBwq68QA.Gu0MBlHpBXEdIS89YQSFrgS6nwtZT3NCax004UcjcFzOT_-ioXwoh8mwEethNTmVfY-F21CZ8ceTeAZQbhYiFqN5cWrnk2WX_KIw8Uq-D1jbrwrhqbFshzUMXqCAoJIe9DLzZYXmYdia1l9mMMdiSyyep9dFGzwOgB_FdGDU-fUIuEGEZyXdeyCM_4TDf652JPOHc_ldZmHivpmfa9QacMXjJxrVN0Y10m0_FC6p_q7WPdyVtUYSk1EMmHjIPNUSvRTSjNPLHhfH_WXNWcVPjy07p3bwNYc2uj4Woy-VYci51M4vuWRZrAMs6GO4eQeAu4Z7rKIc_Zhu4CBZcU1yqg4joQFnWUXRi_a_fq1SeeQYrFC_NFX5jgsz7ElCvPd2s0s0rs6FdBTNDPDdM-o2W35a8Ew46KRHrOT2FN6yJyVVI_hrz0hBajsC-BU4u2i90KlV0SKQOOR19t5RuGLJbLXxRdVL_s172CdQwHUejhjuusq_r0JmxtwCVBCEzMcOzdJ-2u7PPEZbsAiVpdS9MJdDQyVQOJ_e0UlIN6qNKhFSKS9-88mFvDS4MmFdenfacBbGJycjgNx_TgIjnpbk2KAYe2-_mKbMkOctxUA-3ZAfpjMF0UUO46csIJEpmmwmUOp5qt4jz2EbSZjvjmyPIxXF38Qv3g-HGBPUQF8vvx0BHd-WkB6Hs86jjXBlplUD8AgIo-YNoIeH4-2umCw6b-DuGFuG3ZTcyzM8P1lrPCg.SOqmXSkT1dNBh4QknnuBXQ',
}

files = {
    'file': ('"image-api.jpg";filename', open('"image-api.jpg";filename', 'rb')),
}

response = requests.post('https://adsapi.snapchat.com/v1/media/577e68af-0b9b-4ae6-8bbb-22ac6910557f/upload', headers=headers, files=files)

但是,当我尝试使用 python test.py 运行 python 代码时(其中 test.py 有上面的代码)

我收到以下错误:

$ python test.py
Traceback (most recent call last):
  File "test.py", line 9, in <module>
    'file': ('"image-api.jpg";filename', open('"image-api.jpg";filename', 'rb')),
OSError: [Errno 22] Invalid argument: '"image-api.jpg";filename'

我不知道我在这里做错了什么。如果有人能帮助解决这个问题,我将不胜感激。

顺便说一句,我指的是这个link中的文档。 (上传媒体 - 图片部分)

python curl python-requests
1个回答
1
投票

页面不理想,有时无法正确转换某些选项。

我无法测试它,但通常你应该只使用

'image-api.jpg'
而不使用
;filename

并使用

' '
" "
,但不能同时使用。

files = {
    'file': ('image-api.jpg', open('image-api.jpg', 'rb')),
}

最终您可能需要

/full/path/to/image-api.jpg
中的
open()


顺便说一句:

您可以将

curl
requests
发送到页面https://httpbin.org/post,它会发回您的所有信息,然后您可以比较
curl
requests
是否发送相同的数据.


编辑:

用页面测试

httpbin.org
我发现你必须删除标题
'content-type'
。选项
files=...
将自动添加此选项并发送文件。如果我手动添加此标头,则它不会发送文件

© www.soinside.com 2019 - 2024. All rights reserved.