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...
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top