将CURL请求上传图像的Python请求等效调用
我在用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