我看了许多与我的头衔相似的问题,但我还没有发现任何与我有同样问题的问题。
我做了requests.post
将JSON发布到API restful server。以下是摘录
import requests
def upload_data():
url = "http://127.0.0.1:8088/"
data = {"value":"abc123"}
response = requests.post(url, data=data)
print response.status_code, response.reason, response.text
upload_data()
对于服务器端
from flask_restful import Api, Resource
from flask import request
class MyAPI(Resource):
def get():
pass
def post(self):
value = request.data['value']
response_object = {
'value':value
}
return response_object, 201
我希望通过使用
显示201 Created
的结果来使POST功能正常工作
{
'value':'abc123'
}
但是每当我运行脚本时,它都会给我错误的说法
value = request.data["value"]
TypeError: string indices must be integers, not str
如果这是一个糟糕的问题,我很抱歉,但是如果有人能告诉我这个剧本中缺少的东西,我真的很感激。谢谢。
答案 0 :(得分:1)
request.data
是string
,而request.values
是MultiDict
。
您需要将代码更新为:
value = request.values.get('value')
而不是
value = request.data['value']
根据doc
<强> ARGS 强>
具有查询字符串的已解析内容的MultiDict。 (问号后面的URL中的部分)。<强>形式强>
一个MultiDict,包含来自POST或PUT请求的已解析表单数据。请记住,文件上传不会在此处结束,而是在文件属性中结束。<强>值强>
一个CombinedMultiDict,包含form和args的内容。数据强>
包含传入的请求数据作为字符串,以防它带有Flask无法处理的mimetype。
答案 1 :(得分:1)
那是因为请求数据尚未解析为python字典。你是否想过
data = json.loads(request.data)
但请注意,您实际上并未向烧瓶服务器发布JSON正文。您正在发布多部分formdata。所以你可能正在寻找luoluo发布的答案。
另一方面,如果你真的想要处理json,发送 json的正确方法看起来像这样:
requests.post(url, json=data)
然后按照建议加载。