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

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

总结说明

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

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

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

发送请求:

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

收到响应:

  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

python+fastcgi+flup获取请求的数据和环境变量的更多相关文章

  1. Python+requests 发送简单请求--》获取响应状态--》获取请求响应数据

    Python+requests 发送简单请求-->获取响应状态-->获取请求响应数据 1.环境:安装了Python和vscode编译器(Python自带的编译器也ok).fiddler抓包 ...

  2. python从数据库获取全量数据的方法

    python从数据库获取全量数据的方法 学习了:https://blog.csdn.net/lom9357bye/article/details/79503658 原文膜拜: import psyco ...

  3. 入门servlet:request获取请求头数据

    @WebServlet("/RequestDemo2") public class RequestDemo2 extends HttpServlet { protected voi ...

  4. 入门servlet:request获取请求行数据

    /** * 演示Request对象获取请求行数据 */ @WebServlet("/test") public class RequestDemo1 extends HttpSer ...

  5. mitmproxy 获取请求响应数据

    比较好的一个介绍是:https://blog.wolfogre.com/posts/usage-of-mitmproxy/ mitproxy 获取请求响应数据的代码如下: # -*- coding: ...

  6. Postman基本使用——get、post请求、断言、环境变量

      Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件. 它提供功能强大的 Web API & HTTP 请求调试. 它能够发送任何类型的HTTP 请求 (GET, ...

  7. postman的基本用法,请求,断言,环境变量

    postman基本用法 Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件. 它提供功能强大的 Web API & HTTP 请求调试. 它能够发送任何类型的HTT ...

  8. 03-【request对象获取请求的数据 & request对象存取值】

    request概述(封装了客户端所有的请求数据) request是Servlet.service()方法的一个参数,类型为javax.servlet.http.HttpServletRequest.在 ...

  9. 入门servlet:request获取请求体数据

    @WebServlet("/RequestDemo5") public class RequestDemo5 extends HttpServlet { protected voi ...

随机推荐

  1. Python爬虫之一 PySpider 抓取淘宝MM的个人信息和图片

    ySpider 是一个非常方便并且功能强大的爬虫框架,支持多线程爬取.JS动态解析,提供了可操作界面.出错重试.定时爬取等等的功能,使用非常人性化. 本篇通过做一个PySpider 项目,来理解 Py ...

  2. 【实践】用 js 封装java shuffle函数(打乱数组下标方法)

    此方法返回的会是一个全新的数组 所以并不会像java里的shuffle函数一样返回一个引用一样的数组 思路如下: 1.新建一个函数传入需要打乱下标的数组 2.获取数组的长度 3.新建一个用来保存并且返 ...

  3. CentOS7 Failed to start LSB: Bring up/down networking. 已解决!!!

    服务器更换了主板之前配置的静态IP发现启动网卡出现异常. 执行 service network restart 出现以下错误 Restarting network (via systemctl):  ...

  4. svn: warning: xxxx is already under version control

    svn stat  查看当前目录下svn状态 svn remove xxxx svn add xxx svn ci -m "注释"

  5. Python代码可视化

    把以下代码贴到这个网站: http://www.pythontutor.com l1 = [3, [66, 55, 44], (7, 8, 9)] l2 = list(l1) l1.append(10 ...

  6. WebService 之 工作原理

    一.Web Service基本概念 Web Service 也叫 XML Web Service,WebService 是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求 ...

  7. Android 如何添加一个新的时区

    前言          欢迎大家我分享和推荐好用的代码段~~ 声明          欢迎转载,但请保留文章原始出处:          CSDN:http://www.csdn.net        ...

  8. UIImagePickerController 视频录制操作,视频大小,时间长度

    一:使用 iOS 系统 UIImagePickerController 获取视频大小 获取视频长度 - (void)viewDidLoad { [super viewDidLoad]; // Do a ...

  9. Linux打包解压

    tar tar命令可以用来压缩打包单文件.多个文件.单个目录.多个目录. 常用格式: 单个文件压缩打包: tar czvf my.tar file1 多个文件压缩打包: tar czvf my.tar ...

  10. LoadRunner监控Tomcat的几种方法

    通过JConsole监控Tomcat 1.打开tomcat5的bin目录中的catalina.bat文件,在头部注释部分的后面加上: set JAVA_OPTS=%JAVA_OPTS% -Dcom.s ...