我正在尝试将图像发送到我的 API,然后从中获取结果。例如我使用
发送一个bmp图像文件file = {"img": open("img.bmp)}
r = requests.post(url, files = file)
现在我陷入了如何从 API 读取结果的问题。
通常我们将数据值发送到 API 并获得结果
data = {"data":"MyDataString"}
r = requests.get(url, params = data)
但我需要发送一个图像。我尝试寻找在 GET 请求中发送图像或在 POST 请求中使用 r.content 的方法,但无法使其工作。
为了更好地可视化问题,这里是一个例子: 考虑一个 API,您可以在其中发送图像并在结果中获取处理后的图像。
希望你能指引我走向正确的方向。
答案 0 :(得分:1)
这是对您的程序的修改,它将您的程序发布到一个 URL,并期望返回 BMP 图像并将输出写入 stdout
,您可以将其重定向到磁盘文件。然而,关键是返回的图像是字节流 r.content
。随心所欲。
import requests
import sys
url = 'some-url'
with open("img.bmp", "rb") as f:
file = {"img": f}
r = requests.post(url, files=file)
sys.stdout.buffer.write(r.content)
这是一个位于 URL“some-url”的 Python CGI 程序示例。这只是返回原始 BMP:
#!/usr/bin/env python3
import cgi
import cgitb
import sys
cgitb.enable()
form = cgi.FieldStorage()
fileitem = form['img']
bmp = fileitem.file.read()
print('Content-Type: img/bmp\r\n\r\n', end='', flush=True)
# just send back the original image unmodified
sys.stdout.buffer.write(bmp)
答案 1 :(得分:1)
我找到了完成这项工作的方法。 (使用 POST 请求发送和接收图像)
在使用与有问题的 POST 请求相同的方法发送文件时,我收到作为 base64 编码字符串的结果图像。我只需要从 r.content
读取它并解码。
调试 我在 POST 请求中使用 httpbin.org 作为我的 url 来查看我发送的数据。
即r = requests.post("https://httpbin.org", files = file)
解决方案 为了解决这个问题,我根据本指南使用了解码/编码方法here
Booboo 的回答帮助我找到了这个解决方案。
希望这会对其他人有所帮助。