分析http GET and POST参数从BaseHTTPHandler?
-
21-09-2019 - |
题
BaseHTTPHandler从BaseHTTPServer模块似乎不提供任何便利的方式来访问http请求的参数。什么是最好的方式分析获得的参数从路径,而后参数要求的身体吗?
现在,我使用这个用于获得:
def do_GET(self):
parsed_path = urlparse.urlparse(self.path)
try:
params = dict([p.split('=') for p in parsed_path[4].split('&')])
except:
params = {}
这适用于大多数情况下,但我想要的东西更为强大,处理编码和案件,如空参数适当的。理想的是,我喜欢的东西的小型和独立的,而不是一个完整的网络框架。
解决方案
你可以试试 , 模块,该基地,图书馆不是太大,如果需要的话,你可以简单地提取这些代码和你完成。
的 url_decode
法返回MultiDict,并已编码支持:)
作为反对 urlparse.parse_qs
方法,版本需要照顾:
- 编码
- 多个值
- 排序
如果你有没有需要对这些(或编码的情况,使用Python3)于随意使用内在的解决方案。
其他提示
你可能想要使用 urllib.parse
:
>>> from urllib.parse import urlparse, parse_qs
>>> url = 'http://example.com/?foo=bar&one=1'
>>> parse_qs(urlparse(url).query)
{'foo': ['bar'], 'one': ['1']}
对于 蟒蛇2, ,该模块名为 urlparse
而不是的 url.parse
.
更好的解决一个老问题:
def do_POST(self):
length = int(self.headers.getheader('content-length'))
field_data = self.rfile.read(length)
fields = urlparse.parse_qs(field_data)
此将从文档内容拉urlencoded进行POST数据,并用适当的urldecoding解析它的字典
你有没有使用像 CherryPy的库查处?他们提供了一个更快的路径来处理这些事情比BaseHTTPServer。
基本HTTP请求参数支持在 CGI
模块提供。
建议使用的机制处理的形式的数据是cgi.FieldStorage
类。
要获得在提交的表单数据,最好使用
FieldStorage
类。大多为了向后兼容提供此模块中定义的其他类。实例化它只有一次,不带参数。这从标准输入读取或环境(取决于根据CGI标准设定的各种环境变量的值)的形式的内容。因为它可能会消耗标准输入,但是应当仅实例化一次。在
真值FieldStorage
实例可以被索引像Python字典。它允许运营商与会员的测试,并且也支持标准的字典方法keys()
和内置功能len()
。包含空字符串表单域被忽略,并且不会出现在字典中;保持这样的值,提供了可选的keep_blank_values关键字参数创建FieldStorage
实例时。例如,下面的代码(这假定Content-Type头和空白行已经打印)检查该字段名称和ADDR都被设置为一个非空字符串:
form = cgi.FieldStorage()
if "name" not in form or "addr" not in form:
print "<H1>Error</H1>"
print "Please fill in the name and addr fields."
return
print "<p>name:", form["name"].value
print "<p>addr:", form["addr"].value
#...further form processing here...