python+fastcgi+flup获取请求的数据和环境变量
关于nginx+python+fastcgi+flup搭建fastcgi环境没问题了,可是如何处理POST/GET的请求数据呢,这个问题着实纠结了没久,通过尝试和阅读flup的源代码,终于明白了。先上个例子
- #!/usr/bin/env python
- #coding=utf-8
- #author:naiveloafer
- #date:2012-06-07
- from flup.server.fcgi import WSGIServer
- def get_environ(environ):
- rquest_method = environ["REQUEST_METHOD"]
- str = "rquest_method:" + rquest_method + "\r\n"
- query_string = environ["QUERY_STRING"]
- str += ",query_string:" + query_string + "\r\n"
- script_filename = environ["SCRIPT_FILENAME"]
- str += ",script_filename:" + script_filename + "\r\n"
- script_name = environ["SCRIPT_NAME"]
- str += ",script_name:" + script_name + "\r\n"
- rquest_uri = environ["REQUEST_URI"]
- str += ", rquest_uri:" + rquest_uri + "\r\n"
- remote_addr = environ["REMOTE_ADDR"]
- str += ",remote_addr:" + remote_addr + "\r\n"
- remote_port = environ["REMOTE_PORT"]
- str += ",remote_port:" + remote_port + "\r\n"
- data = environ["wsgi.input"].read()
- str += ", data:" + data + "\r\n"
- return str
- def naiveloafer_app(environ, start_response):
- start_response('200 OK', [('Content-Type', 'text/plain')])
- content = get_environ(environ)
- return [content]
- if __name__ == '__main__':
- WSGIServer(naiveloafer_app).run()
总结说明:
1、naiveloafer_app是请求处理的过程,所有处理放到这个函数中,每一个请求,该函数就运行一次,函数名可以自定义。
2、该函数有两个参数,第一个environ是个字典,记录了很多有用的信息。
3、environ["wsgi.input"]是输入流的数据,返回的是一个InputStream对象,查看源文件flup/server/fcgi_base.py发现InputStream是一个类,提供了read()、readln()等一些方法,并且有详细的注释说明,于是下面就知道如何做了。
发送请求:
- curl -d"name=naiveloafer&age=24&sex=male&single=1" http://10.11.8.105:83/naiveloafer.cgi?cmd=123
收到响应:
- rquest_method:POST
- ,query_string:cmd=123
- ,script_filename:/usr/local/nginx-1.2.1/html/naiveloafer.cgi
- ,script_name:/naiveloafer.cgi
- , rquest_uri:/naiveloafer.cgi?cmd=123
- ,remote_addr:10.10.20.208
- ,remote_port:52283
- , 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获取请求的数据和环境变量的更多相关文章
- Python+requests 发送简单请求--》获取响应状态--》获取请求响应数据
Python+requests 发送简单请求-->获取响应状态-->获取请求响应数据 1.环境:安装了Python和vscode编译器(Python自带的编译器也ok).fiddler抓包 ...
- python从数据库获取全量数据的方法
python从数据库获取全量数据的方法 学习了:https://blog.csdn.net/lom9357bye/article/details/79503658 原文膜拜: import psyco ...
- 入门servlet:request获取请求头数据
@WebServlet("/RequestDemo2") public class RequestDemo2 extends HttpServlet { protected voi ...
- 入门servlet:request获取请求行数据
/** * 演示Request对象获取请求行数据 */ @WebServlet("/test") public class RequestDemo1 extends HttpSer ...
- mitmproxy 获取请求响应数据
比较好的一个介绍是:https://blog.wolfogre.com/posts/usage-of-mitmproxy/ mitproxy 获取请求响应数据的代码如下: # -*- coding: ...
- Postman基本使用——get、post请求、断言、环境变量
Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件. 它提供功能强大的 Web API & HTTP 请求调试. 它能够发送任何类型的HTTP 请求 (GET, ...
- postman的基本用法,请求,断言,环境变量
postman基本用法 Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件. 它提供功能强大的 Web API & HTTP 请求调试. 它能够发送任何类型的HTT ...
- 03-【request对象获取请求的数据 & request对象存取值】
request概述(封装了客户端所有的请求数据) request是Servlet.service()方法的一个参数,类型为javax.servlet.http.HttpServletRequest.在 ...
- 入门servlet:request获取请求体数据
@WebServlet("/RequestDemo5") public class RequestDemo5 extends HttpServlet { protected voi ...
随机推荐
- Newtonsoft.Json.4.5.11使用方法总结---反序列化json字符串
写在开头: 最近项目需求,需要在C#中处理json字符串,毫不犹豫的下载了Newtonsoft.Json 4.5.11(2012.12.17)http://json.codeplex.com/,然后百 ...
- 修改ASPCMS升级扩展功能
修改 inc/aspcms_templateFun.asp 查找"content=decodeHtml(rsObj("Content"))" 替换为”conte ...
- JMeter 三:搭建一个Web Test Plan
参考:http://jmeter.apache.org/usermanual/build-web-test-plan.html 场景 5个用户并发测试百度搜索,有两个请求,一个请求搜索“你好”,一个请 ...
- win7之64位下安装oracle11g遇到问题和不能删除干净的问题
今天在win7下装了oracle11g 删了又卸 来来回回重启了4.5次,结合网上是解释归纳下几点: 一.win64_11gR2_database_1of2.zip和win64_11gR2_datab ...
- 运用JMX监控Tomcat
1.先配Tomcat的启动语句,window下tomcat的bin/catalina.bat(linux为catalina.sh),在头上注释部分(.bat为rem..sh为#)后面加上set JAV ...
- location.href
location.href用法 CreateTime--2018年2月22日15:22:02 Author:Marydon 1.在当前页面打开URL页面 // 方式一 window.locatio ...
- MFC中获取各个窗口之间的句柄或者指针对象的方法
MFC在非常多的对话框操作中,我们常常要用到在一个对话框中调用还有一个对话框的函数或变量.能够用例如以下方法来解决. HWND hWnd=::FindWindow(NULL,_T("S ...
- 利用POI进行Excel的导出
需求:将用户的违约金信息导出为excel表格格式 步骤 1. 数据库中增加按钮的值(注意上级编号要和页面隐藏域中的相等) DZ内容(页面加载时根据SJBH查询数据库内容,读取DZ字段信息并加载样式及方 ...
- linux 下远程连接mysql命令详解
http://hi.baidu.com/aaxh/blog/item/49bcb78ffe3dfae4f01f36b2.html一.MySQL 连接本地数据库,用户名为“root”,密码“123”(注 ...
- Android Shell Cmd
1. view android version: grep ro.build.version.sdk= system/build.prop getprop ro.build.version.relea ...