使用请求将图像URL发布到api并使用flask视图返回json

时间:2017-07-04 10:02:06

标签: python json web-applications flask

我是烧瓶或Web应用程序的新手,所以我在这个虚拟机上运行了一个使用flask的API,它将图像作为输入并返回JSON文件中的功能。这是代码:

`

from flask import Flask

from flask import send_file

from flask import Flask, request, send_from_directory, redirect, render_template, url_for, jsonify

import socket

import requests

import json

ip = socket.gethostbyname((socket.getfqdn()))

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'


@app.route('/get_image')
def get_image():
    return send_from_directory("C:/images", "22_1.bmp")


@app.route('/goto_api')
def goto_api():
    return redirect("http://127.0.0.1/features/", code=302 )

@app.route('/post')
def post():

url = 'http://127.0.0.1/features/'

payload = {'image': 'http://127.0.0.10:6485/get_image'}
#payload = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"image\"\r\n\r\nhttp://127.0.0.10:6485/get_image\r\n-----011000010111000001101001--"
headers = {'content-type': "application/json"}
response = requests.post(url, data=payload, headers=headers)

return json.loads(str(response)) #return json.loads(response)


if __name__ == '__main__':
    app.debug = True
    app.run(port=6485, host=ip)

`

当我使用return json.loads(response)时, 它返回一个错误: TypeError:JSON对象必须是str,bytes或bytearray,而不是' Response'

当我使用return json.loads(str(response))时,它会出现以下错误:

json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

我也尝试了很多其他的东西。请帮忙 :) 以下是该API的输出结果如何

    HTTP 201 Created
    Allow: GET, POST, OPTIONS
    Content-Type: application/json
    Vary: Accept

{
    "features": [
        0.0,
        0.0,
    4.321675777435303,
    1.5690128803253174,
    0.0,
    4.284165859222412,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    9.667842864990234,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    3.6376543045043945,
    3.540004253387451,
    0.0,
    0.0,
    0.0,
    0.0,
    .
    .
    .
            0.0,
    0.0,
    2.088599681854248,
    5.591969013214111,
    3.5350821018218994,
    0.0,
    0.0,
    13.648137092590332,
    0.0,
    3.5895862579345703,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.9650025963783264,
    0.0,
    0.9726126194000244,
    0.0,
    2.707155704498291,
    0.40982359647750854,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    5.446600437164307
]

}

1 个答案:

答案 0 :(得分:1)

响应对象的类型不是字符串,而是requests.Response。如果您希望将响应正文作为JSON,则需要使用in the documentation所述的json()方法。为方便起见和正确的MIME类型,您可以将其与Flask's JSON helper flask.json.jsonify

组合使用
from flask import jsonify

...

@app.route('/post')
def post():
    ...
    return jsonify(response.json())