Python。无法向简单站点 api 发出请求。烧瓶和请求
Python. Cannot make a request to simple site api. Flask and requests
我正在尝试为我的网站创建简单的 API。我用烧瓶创建了路线:
@api.route('/api/rate&message_id=<message_id>&performer=<performer_login>', methods=['POST'])
def api_rate_msg(message_id, performer_login):
print("RATE API ", message_id, ' ', performer_id)
return 400
print(...)
函数不执行...
我使用 flask-socketio
在客户端和服务器之间进行通信。
我从客户端发送 json 并处理它:
@socket.on('rate')
def handle_rate(data):
print(data)
payload = {'message_id':data['message_id'], 'performer':data['performer']}
r = requests.post('/api/rate', params=payload)
print (r.status_code)
请注意,data
变量是从客户端发送的并且是正确的(我已经检查过了)。
print(r.status_code)
不要太执行...
我哪里错了?
对不起,我的英语不好:(
这个 api 函数必须提高存储在 mongodb 中的消息的速率,如果感兴趣的话。
从您的 api 路线中删除以下部分
&message_id=<message_id>&performer=<performer_login
这在 POST 请求中不是必需的。它有助于 GET 请求。 API 调用请求与路由定义不匹配,因此您遇到了当前问题
不要将 &message_id=<message_id>&performer=<performer_login>
放在您的路由字符串中。相反,从 request.args
.
获取这些参数
试一试:
from flask import request
...
@api.route('/api/rate', methods=['POST'])
def api_rate_msg():
print(request.args)
return ''
我用 httpie 测试过:
$ http -v POST :5000/api/rate message_id==123 performer_login==foo
POST /api/rate?message_id=123&performer_login=foo HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 0
Host: localhost:5000
User-Agent: HTTPie/0.9.8
HTTP/1.0 200 OK
Content-Length: 0
Content-Type: text/html; charset=utf-8
Date: Sun, 02 Apr 2017 13:54:40 GMT
Server: Werkzeug/0.11.11 Python/2.7.13
从 flask 的日志中:
ImmutableMultiDict([('message_id', u'123'), ('performer_login', u'foo')])
127.0.0.1 - - [02/Apr/2017 22:54:40] "POST /api/rate?message_id=123&performer_login=foo HTTP/1.1" 200 -
我正在尝试为我的网站创建简单的 API。我用烧瓶创建了路线:
@api.route('/api/rate&message_id=<message_id>&performer=<performer_login>', methods=['POST'])
def api_rate_msg(message_id, performer_login):
print("RATE API ", message_id, ' ', performer_id)
return 400
print(...)
函数不执行...
我使用 flask-socketio
在客户端和服务器之间进行通信。
我从客户端发送 json 并处理它:
@socket.on('rate')
def handle_rate(data):
print(data)
payload = {'message_id':data['message_id'], 'performer':data['performer']}
r = requests.post('/api/rate', params=payload)
print (r.status_code)
请注意,data
变量是从客户端发送的并且是正确的(我已经检查过了)。
print(r.status_code)
不要太执行...
我哪里错了?
对不起,我的英语不好:(
这个 api 函数必须提高存储在 mongodb 中的消息的速率,如果感兴趣的话。
从您的 api 路线中删除以下部分
&message_id=<message_id>&performer=<performer_login
这在 POST 请求中不是必需的。它有助于 GET 请求。 API 调用请求与路由定义不匹配,因此您遇到了当前问题
不要将 &message_id=<message_id>&performer=<performer_login>
放在您的路由字符串中。相反,从 request.args
.
试一试:
from flask import request
...
@api.route('/api/rate', methods=['POST'])
def api_rate_msg():
print(request.args)
return ''
我用 httpie 测试过:
$ http -v POST :5000/api/rate message_id==123 performer_login==foo
POST /api/rate?message_id=123&performer_login=foo HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 0
Host: localhost:5000
User-Agent: HTTPie/0.9.8
HTTP/1.0 200 OK
Content-Length: 0
Content-Type: text/html; charset=utf-8
Date: Sun, 02 Apr 2017 13:54:40 GMT
Server: Werkzeug/0.11.11 Python/2.7.13
从 flask 的日志中:
ImmutableMultiDict([('message_id', u'123'), ('performer_login', u'foo')])
127.0.0.1 - - [02/Apr/2017 22:54:40] "POST /api/rate?message_id=123&performer_login=foo HTTP/1.1" 200 -