我已经使用python库flask
开发了一个简单的REST API。这是我在做什么的示例:
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
的许多其他参数,但是找不到这个简单问题的答案:
如何使用json参数将GET请求发送到API?
答案 0 :(得分:0)
通常情况下,它会使用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数据。