将CURL请求上传图像的Python请求等效调用

1 投票
2 回答
5617 浏览
提问于 2025-04-18 00:01

我在用Python的requests模块上传图片,但无论我怎么尝试,虽然上传成功了,但打开或读取图片时总是出错。我把图片编码成base64,还设置了内容类型的头信息(比如image/png、image/jpeg等等)……

不过,我用CURL做的这个操作就能成功:

curl -u test@test.ca:test -H 'Content-Type: image/jpeg' --data-binary @test.jpeg -X POST 'https://test.test.com/api/upload.json?filename=test.jpeg'

请问用Python的requests模块来实现这个请求(包括头信息等)应该怎么写呢?

2 个回答

1

在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或语言时。比如,有人可能会在使用某个库的时候,发现它的功能和自己想要的有些不一样。这种情况下,通常可以通过查阅文档或者在网上搜索相关信息来找到解决方案。

另外,有些问题可能是因为代码中的某些部分没有正确设置,或者是因为使用的版本不兼容。这时候,检查代码和版本信息就显得特别重要。

总之,遇到问题时,先冷静下来,仔细查看相关资料,通常能找到解决办法。如果实在解决不了,可以考虑向社区求助,很多人乐意分享他们的经验和解决方案。

headers = {'Content-Type' : 'image/jpeg'}
params = {'filename' : 'test.jpg'}
r = requests.post("https://test.test.com/api/upload.json",
                   auth=('user','pw'), headers=headers, params=params)
3

要复现你的 curl 命令,其实不需要把图片转成 base64 格式。使用 --data-binary @test.jpeg 这个选项,curl 会直接把 test.jpeg 文件原封不动地发送出去:

import requests

r = requests.post('https://example.com/api/upload.json?filename=test.jpeg', 
                  data=open('test.jpeg', 'rb'), 
                  headers={'Content-Type': 'image/jpeg'},
                  auth=('test@test.ca', 'test')) # username, password

撰写回答