python+fastcgi+flup获取请求的数据和环境变量

 关于nginx+python+fastcgi+flup搭建fastcgi环境没问题了,可是如何处理POST/GET的请求数据呢,这个问题着实纠结了没久,通过尝试和阅读flup的源代码,终于明白了。先上个例子

 

[python] view plain copy
 
  1. #!/usr/bin/env python  
  2. #coding=utf-8  
  3. #author:naiveloafer  
  4. #date:2012-06-07  
  5.   
  6. from flup.server.fcgi import WSGIServer  
  7.   
  8. def get_environ(environ):  
  9.     rquest_method = environ["REQUEST_METHOD"]  
  10.     str = "rquest_method:" + rquest_method + "\r\n"  
  11.     query_string = environ["QUERY_STRING"]  
  12.     str += ",query_string:" + query_string + "\r\n"  
  13.     script_filename = environ["SCRIPT_FILENAME"]  
  14.     str += ",script_filename:" + script_filename + "\r\n"  
  15.     script_name = environ["SCRIPT_NAME"]  
  16.     str += ",script_name:" + script_name + "\r\n"  
  17.     rquest_uri = environ["REQUEST_URI"]  
  18.     str += ", rquest_uri:" + rquest_uri + "\r\n"  
  19.     remote_addr = environ["REMOTE_ADDR"]  
  20.     str += ",remote_addr:" + remote_addr + "\r\n"  
  21.     remote_port = environ["REMOTE_PORT"]  
  22.     str += ",remote_port:" + remote_port + "\r\n"  
  23.       
  24.     data = environ["wsgi.input"].read()  
  25.     str += ", data:" + data + "\r\n"  
  26.     return str      
  27.   
  28. def naiveloafer_app(environ, start_response):  
  29.     start_response('200 OK', [('Content-Type', 'text/plain')])  
  30.     content = get_environ(environ)  
  31.     return [content]  
  32.   
  33. if __name__  == '__main__':  
  34.    WSGIServer(naiveloafer_app).run()  

 

 

总结说明

        1、naiveloafer_app是请求处理的过程,所有处理放到这个函数中,每一个请求,该函数就运行一次,函数名可以自定义。

         2、该函数有两个参数,第一个environ是个字典,记录了很多有用的信息。

         3、environ["wsgi.input"]是输入流的数据,返回的是一个InputStream对象,查看源文件flup/server/fcgi_base.py发现InputStream是一个类,提供了read()、readln()等一些方法,并且有详细的注释说明,于是下面就知道如何做了。

 

发送请求:

[plain] view plain copy
 
  1. curl -d"name=naiveloafer&age=24&sex=male&single=1" http://10.11.8.105:83/naiveloafer.cgi?cmd=123   

收到响应:

 

 

[plain] view plain copy
 
  1. rquest_method:POST  
  2. ,query_string:cmd=123  
  3. ,script_filename:/usr/local/nginx-1.2.1/html/naiveloafer.cgi  
  4. ,script_name:/naiveloafer.cgi  
  5. , rquest_uri:/naiveloafer.cgi?cmd=123  
  6. ,remote_addr:10.10.20.208  
  7. ,remote_port:52283  
  8. , data:name=naiveloafer&age=24&sex=male&single=1  

 

 

参考文章

Django源码解析(三) Django开发服务器,WSGI规范实现.:http://www.cnblogs.com/pythoner/archive/2011/08/13/2137442.html

posted @ 2018-01-17 10:25  追忆丶年华  阅读(588)  评论(0编辑  收藏  举报