如何处理pywsgi中的非http请求

时间:2012-05-22 03:23:09

标签: python gevent

我有一个使用gevent.pywsgi.WSGIServer (http://www.gevent.org/gevent.pywsgi.html)的网络服务器,我需要处理非http请求以及普通的http请求。

Server:
    web_server = gevent.pywsgi.WSGIServer(('', 8080), web_server);
    web_server.serve_forever();

Handler:
def viewer_command_server(env, start_response):
    if env['REQUEST_METHOD'].upper() == "PUT":
        path = env["PATH_INFO"]
        start_response("200 OK", [("Content-Type", "text/html"), ("Cache-Control", "no-cache"), ("Connection","keep-alive")])
            return [ ""]  

这可以处理正常的PUT请求,但我还想服务flash应用程序使用的crossdomain.xml文件。但问题是我在flash应用程序尝试检索其crossdomain.xml文件时得到了这个。

"socket fileno=13 sock=66.228.55.170:9090 peer=96.54.202.251:63380: Invalid HTTP method: '<policy-file-request/>\x00'
96.54.202.251 - - [2012-05-21 22:58:53] "<policy-file-request/>" 400 0 2.940527
"

有没有办法处理这个请求? Adobe建议在端口843上运行单独的tcp服务器来提供此文件。 我想保留8080端口的所有内容。

2 个答案:

答案 0 :(得分:0)

端口843上的协议不是HTTP。请参阅http://www.adobe.com/devnet/flashplayer/articles/socket_policy_files.html

有效的HTTP请求类似于

GET /path HTTP/1.0

(有关更多示例,请参阅http://www.jmarshall.com/easy/http/#sample。)

如果有办法告诉Flash Player客户端在843以外的某个端口上查找策略文件,那么可能有一种方法可以告诉它使用HTTP而不是这个自定义XML-ish“”消息,然后只有这样你才能从HTTP服务器上处理这个问题。

一切皆有可能,但我认为在HTTP HTTP上使用的同一端口8080上处理非HTTP请求作为WSGI服务器的一部分根本不是一个好主意。

答案 1 :(得分:0)

今天我设法将这一个稍微剥离了一下。埋在adobe文档中的一个注意事项是,如果您使用的是原始套接字,那么fit将使用其原始XML查询来查找您的跨域文件。如果你指定'http'它确实有用,它确实通过http获取跨域文件。对我来说问题是我在我的flash脚本中使用了原始tcp套接字。所以它试图从该服务器获取跨域文件。 因此,为了简单起见,我将更改网络调用以使用http。这就是他们正在做的事情(我使用的是我发现使用http多部分响应进行流式传输的示例)