【问题标题】:Python Flask application getting OPTIONS instead of POSTPython Flask 应用程序获取 OPTIONS 而不是 POST
【发布时间】:2015-05-20 03:11:15
【问题描述】:

我有一个 python Flask 监听器在端口 8080 上等待。我希望另一个进程对该端口进行一系列 POST。监听器的代码如下。

#!/usr/bin/env python2
from __future__ import print_function
from flask import Flask, request
from werkzeug import secure_filename
from datetime import datetime
import os, traceback, sys 
import zlib
import ssl 
import json
import os
import base64

app = Flask('__name__')

@app.route('/',methods=['GET','POST','OPTIONS'])                                                                                                                                         
def recive_fe_events():
    try:
        data = request.get_data()

        if request.content_length < 20000 and request.content_length != 0:
            filename = 'out/{0}.json'.format(str(datetime.now()))
            with open(filename, 'w') as f:
                 f.write(data)

            print('Wrote', filename)
        else:
            print("Request too long", request.content_length)
            content = '{{"status": 413, "content_length": {0}, "content": "{1}"}}'.format(request.content_length, data)
            return content, 413 
    except:
        traceback.print_exc()
        return None, status.HTTP_500_INTERNAL_SERVER_ERROR

    return '{"status": 200}\n'

if __name__ == '__main__':
    app.run(host='0.0.0.0',debug=False,port=8080)

但是,每当我尝试触发要推送到上述侦听器的事件时。似乎我得到的是OPTIONS 而不是POST

192.168.129.75 - - [20/May/2015 14:33:45] "OPTIONS / HTTP/1.1" 200 -
192.168.129.75 - - [20/May/2015 14:33:45] "OPTIONS / HTTP/1.1" 200 -
192.168.129.75 - - [20/May/2015 14:33:51] "OPTIONS / HTTP/1.1" 200 -
192.168.129.75 - - [20/May/2015 14:33:51] "OPTIONS / HTTP/1.1" 200 -

我阅读了烧瓶文档。 (从 Flask 0.6 开始,OPTIONS 被隐式添加并由标准请求处理处理。)

为什么我在期待POST 时看到OPTIONS。似乎POST 似乎由于某种原因丢失了。我在POST 发生时使用tcpdump 捕获了流量并使用wireshark 进行分析。相关跟踪的一部分附在此处。

在我看来,尝试进行 POST 的来源是使用 SSL 加密数据。我的理解正确吗?

【问题讨论】:

  • 您的客户端代码在哪里?
  • 这是保密的。我不能在这里发布。
  • 如果您无法发布您的客户端代码(甚至是请求的部分),请尝试向您的服务器发出 curl 请求。如果它发送 POST 请求,则问题出在您的客户端。
  • 我可以发送 curl 请求并且确实有效。另请参阅上面的更新问题。
  • 您是否在其他地方定义了任何 SSL 设置?您可以使用debug=True 完成这项工作吗?

标签: python json flask


【解决方案1】:

除非您要显式处理OPTIONS 方法,否则不要将其放入您的方法中。

试试这个:

@app.route('/',methods=['GET','POST'])

【讨论】:

  • 你的问题不是你得到了 OPTIONS,你的问题是你没有得到 POST。无论您是自己处理 OPTIONS 还是 Flask 为您处理,关于您的 OPTIONS 响应的某些内容都不会让您的客户满意。尝试使用,例如,wireshark 来嗅探流量,看看你的 OPTIONS 可能有什么问题。此外,尝试检测您的客户,看看他不喜欢 OPTIONS 响应的哪些方面。
  • 嗨,您能否链接一些有关“您自己处理 OPTIONS 还是 Flask 是否为您处理”的文档,即我在哪里可以找到一些有关 Flask 默认如何为您处理 OPTIONS 的文档?谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-16
  • 1970-01-01
  • 2016-07-22
  • 2014-04-11
  • 2018-07-04
相关资源
最近更新 更多