在POST请求(python请求)之后获取响应/返回值



我正在尝试将图像发送到我的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,您发送一个图像并在结果中获得处理后的图像。

希望你能引导我朝着正确的方向前进。

这是对程序的一个修改,它将程序发布到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)

这里是一个Python CGI程序的例子;一些url";。这只是返回原始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/bmprnrn', end='', flush=True)
# just send back the original image unmodified
sys.stdout.buffer.write(bmp)

我找到了做这项工作的方法。(发送和接收带有POST请求的图像(

当使用与问题POST请求相同的方法发送文件时,我会收到作为base64编码字符串的结果图像。我只需要从r.content中读取并解码。

为了调试我在POST请求中使用httpbin.org作为我的url来查看我发送的数据。

r = requests.post("https://httpbin.org", files = file)

解决方案为了解决这个问题,我在这里使用了根据本指南的解码/编码方法

Booboo的回答帮助我找到了这个解决方案。

希望这能帮助其他人。

最新更新