使用urllib库向flask服务器发送POST请求时遇到问题。我的服务器中的所有内容都已经使用Postman和Advanced REST Client进行了测试,所以我很自信我的服务器没有任何明显的错误,但是在使用这段代码时,我得到了500个错误。
我已经尝试了很多堆栈溢出帖子和上面列出的答案,但是还没有找到一个有效的解决方案
通常,服务器具有/name/add的路由,它接受POST请求以接收要添加到全局列表的名称,而/names返回一个字典,其值为字符串名称列表。我真的很难受,因为这一切对邮递员和ARC来说都很好:(
pkt = parse.urlencode({'name':'Hayden'}).encode('ascii')
req = request.Request('http://127.0.0.1:5000/name/add', pkt)
with request.urlopen(req) as response:
print(response.read())
服务器代码如下所示:
APP = Flask(__name__)
NAMES = []
@APP.route("/name/add", methods=['POST'])
def add_name():
'''
Adds a new name to the NAMES list
'''
data = request.get_json()
NAMES.append(data['name'])
return {}
@APP.route("/names", methods=['GET'])
def ret_names():
'''
Displays the NAMES list
'''
return dumps({
'name':str(NAMES)
})
@APP.route("/name/remove", methods=['DELETE'])
def rm_name():
'''
Removes a name from the NAMES list
'''
data = request.get_json()
NAMES.remove(data['name'])
return {}
if __name__ == "__main__":
APP.run(port=5000)
错误消息如下所示:
Traceback (most recent call last):
File "/import/reed/3/z5265106/.local/lib/python3.7/site-packages/flask/app.py", line 2446, in wsgi_app
response = self.full_dispatch_request()
File "/import/reed/3/z5265106/.local/lib/python3.7/site-packages/flask/app.py", line 1951, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/import/reed/3/z5265106/.local/lib/python3.7/site-packages/flask/app.py", line 1820, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/import/reed/3/z5265106/.local/lib/python3.7/site-packages/flask/_compat.py", line 39, in reraise
raise value
File "/import/reed/3/z5265106/.local/lib/python3.7/site-packages/flask/app.py", line 1949, in full_dispatch_request
rv = self.dispatch_request()
File "/import/reed/3/z5265106/.local/lib/python3.7/site-packages/flask/app.py", line 1935, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "simple.py", line 18, in add_name
NAMES.append(data['name'])
TypeError: 'NoneType' object is not subscriptable
在服务器代码中,您正在使用
.get_json()
读取请求,如果数据类型与json返回不匹配Nothing
。nothing类型与您在没有“name
”访问权限的情况下得到的错误相匹配。更多关于get_json()的文档,请参见https://flask.palletsprojects.com/en/1.1.x/api/#flask.Request.get_json因此,为了解决您的问题,您可以用json.dumps()替换前面的urlencode函数来序列化请求的数据。记住保留.encode()以确保以字节而不是字符串的形式发送请求
尝试此代码并查看其是否有效:
还有,看看这个Link
请考虑把你的代码放在一个TIG/catch中,这样你就可以看到有什么问题了。为了使用GET方法,请尝试以下方法:
相关问题 更多 >
编程相关推荐