所以我使用flask托管图像,然后我想使用相同代码中的url对API发布请求:
@app.route('/host')
def host():
return send_from_directory("C:/images", "image1.png")
@app.route('/post')
def post():
response = requests.post(url, data={'input':'<url for host>', headers=headers)
return jsonify(response.json())
我相信这两个视图函数都在同一个python文件中,post()被阻止。 这个问题有解决方法吗?
PS:如果我在不同的机器上托管图像,它可以工作,但这不是我想要的。 谢谢!
答案 0 :(得分:0)
我认为您的代码存在一些问题。
首先,我不相信Flask中有一个@app.post()
装饰器。我的猜测是你试图指定该路由应由用户发布。这样做的方法是@app.route('/post', methods=['POST'])
。
接下来,当用户向此端点发送HTTP请求时,您似乎希望/post
端点向用户指定的(?)URL发送POST请求。对于用户指定的/用户POST的URL,你会这样做(我没有运行这段代码来测试它):
@app.route('/send_post_request', methods=['POST'])
def send_post_request():
user_posted_data = json.loads(request.data)
user_specified_url = user_posted_data['url']
dict_to_post= { 'input': url_for('hosts') }
headers = {} # Fill these in
response = requests.post(user_specified_url , json=dict_to_post, headers=headers)
return jsonify(response.json())
如果服务器知道发送POST请求的URL,您可以让用户只发送一个GET请求:
@app.route('/send_post_request', methods=['GET'])
def send_post_request():
dict_to_post = { 'input': url_for('hosts') }
headers = {} # Fill these in
server_specified_url = '' # Fill this in
response = requests.post(server_specified_url, json=dict_to_post, headers=headers)
return jsonify(response.json())