• 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 + " "  
    11.     query_string = environ["QUERY_STRING"]  
    12.     str += ",query_string:" + query_string + " "  
    13.     script_filename = environ["SCRIPT_FILENAME"]  
    14.     str += ",script_filename:" + script_filename + " "  
    15.     script_name = environ["SCRIPT_NAME"]  
    16.     str += ",script_name:" + script_name + " "  
    17.     rquest_uri = environ["REQUEST_URI"]  
    18.     str += ", rquest_uri:" + rquest_uri + " "  
    19.     remote_addr = environ["REMOTE_ADDR"]  
    20.     str += ",remote_addr:" + remote_addr + " "  
    21.     remote_port = environ["REMOTE_PORT"]  
    22.     str += ",remote_port:" + remote_port + " "  
    23.       
    24.     data = environ["wsgi.input"].read()  
    25.     str += ", data:" + data + " "  
    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

  • 相关阅读:
    Rails生成随机字符串及加解密
    rails generate model/resource/scaffold的区别
    Rails generate的时候不生成assets和test
    rails delegate机制
    React Router V4发布
    react中创建组件的三种方法
    fetch的用法
    Ruby中map, collect,each,select,reject,reduce的区别
    Sublime Theme
    CentOS 升级Python3.X和pip3
  • 原文地址:https://www.cnblogs.com/xiaoleiel/p/8301433.html
Copyright © 2020-2023  润新知