代码之家  ›  专栏  ›  技术社区  ›  ataylor

从BaseHTTPHandler解析http GET和POST参数?

  •  30
  • ataylor  · 技术社区  · 16 年前

    BaseHTTPServer模块中的BaseHTTPHandler似乎没有提供任何方便的方式来访问http请求参数。解析路径中的GET参数和请求体中的POST参数的最佳方法是什么?

    def do_GET(self):
        parsed_path = urlparse.urlparse(self.path)
        try:
            params = dict([p.split('=') for p in parsed_path[4].split('&')])
        except:
            params = {}
    

    这适用于大多数情况,但我希望有一种更健壮的方法来正确处理编码和空参数之类的情况。理想情况下,我想要一些小的和独立的东西,而不是一个完整的web框架。

    5 回复  |  直到 16 年前
        1
  •  5
  •   Wolph    10 年前

    你可以试试 Werkzeug 模块,基本的Werkzeug库不是太大,如果需要,您可以简单地提取这段代码,然后就完成了。

    这个 url_decode

    相对于 urlparse.parse_qs 方法Werkzeug版本负责:

    • 多个值
    • 排序顺序

        2
  •  87
  •   alexdlaird    7 年前

    您可能想使用 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']}
    

    为了 ,模块名为 urlparse 而不是 url.parse .

        3
  •  13
  •   Mike    11 年前

    更好地解决老问题:

    def do_POST(self):
        length = int(self.headers.getheader('content-length'))
        field_data = self.rfile.read(length)
        fields = urlparse.parse_qs(field_data)
    

        4
  •  2
  •   Benno    16 年前

    你有没有调查过像这样的图书馆 CherryPy ? 它们提供了比BaseHTTPServer更快的处理这些事情的方法。

        5
  •  1
  •   Community Mohan Dere    6 年前

    CGI module . 处理表单数据的推荐机制是 cgi.FieldStorage 班级。

    要获取提交的表单数据,最好使用 FieldStorage 班级。这个模块中定义的其他类主要是为了向后兼容。只实例化一次,不带参数。它从标准输入或环境中读取表单内容(取决于根据CGI标准设置的各种环境变量的值)。因为它可能使用标准输入,所以应该只实例化一次。

    这个 现场存储 实例可以像Python字典一样编制索引。它允许使用in运算符进行成员资格测试,还支持标准字典方法 keys() len() . 包含空字符串的表单字段将被忽略,并且不会出现在字典中;要保留这些值,请在创建 现场存储

    例如,以下代码(假定内容类型标题和空行已经打印)检查字段name和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...
    
    推荐文章