Flask - получает запросы с параметром json, используя cURL - PullRequest
0 голосов
/ 02 сентября 2018

Я разработал простой REST API с использованием библиотеки Python flask. Вот пример того, что я делаю:

from flask import Flask, request
import json

app = Flask(__name__)

@app.route("/")
def hello():
    json_arg = json.loads(request.args.get("json_arg", None))
    non_json_arg = request.args.get("non_json_arg", None)
    return "Hello, your json arg is: %s and your non_json_arg is %s"%(json_arg, non_json_arg)


if __name__ == '__main__':
    app.run(debug=True)

Чтобы проверить мой код, я написал клиент Python следующим образом:

import requests
import json

json_arg = [
            {
                "0": 1.3,
                "1": 1.4
            },
            {
                "0": 5.3,
                "1": 40.5
            }
        ]
non_json_arg = "some_arg"

arguments = {
    "json_arg": json.dumps(json_arg),
    "non_json_arg": non_json_arg
}

r = requests.get("http://localhost:5000", params=arguments, headers={"content-type": "application/json"})

print(r.text)

Это прекрасно работает, и вывод:

Hello, your json arg is: [{u'1': 1.4, u'0': 1.3}, {u'1': 40.5, u'0': 5.3}] and your non_json_arg is some_arg

По причинам, связанным с тестированием, я хочу сделать то же самое с cURL, что я до сих пор тестировал:

curl -X GET --data '{"json_arg": [ { "0": 1.3, "1": 1.4 }, { "0": 5.3, "1": 40.5 } ], "non_json_arg":"some_arg"}' http://localhost:5000

Но это возвращает ошибку:

....
>> json_arg = json.loads(request.args.get("json_arg", None))
TypeError: expected string or buffer

Я проверил множество других аргументов cURL, но не могу найти ответ на этот простой вопрос:

Как отправить запрос GET в API с аргументами json?

1 Ответ

0 голосов
/ 02 сентября 2018

Обычно для этого используется запрос POST, а не запрос get. Так бы это выглядело так:

curl -X POST -d '{"json_arg": [ { "0": 1.3, "1": 1.4 }, { "0": 5.3, "1": 40.5 } ], "non_json_arg":"some_arg"}' http://localhost:5000

Однако, если вы хотите использовать запрос GET, вам нужно использовать параметры в фактическом URL, чтобы он выглядел примерно так:

curl -X GET http://localhost:5000/?json_arg=%5B%7B%220%22%3A+1.3%2C+%221%22%3A+1.4%7D%2C+%7B%220%22%3A+5.3%2C+%221%22%3A+40.5%7D%5D&non_json_arg=some_arg

Я бы предложил, как правило, использовать POST-запрос для отправки данных JSON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...