【问题标题】:Sending multiple POST data items with the same name, using AppEngine使用 AppEngine 发送多个具有相同名称的 POST 数据项
【发布时间】:2010-08-26 16:11:06
【问题描述】:

我尝试使用 AppEngine 中的 urlfetch 将 POST 数据发送到服务器。其中一些 POST 数据项具有相同的名称,但具有不同的值。

form_fields = {
   "data": "foo",
   "data": "bar"
}

form_data = urllib.urlencode(form_fields)
result = urlfetch.fetch(url="http://www.foo.com/", payload=form_data, method=urlfetch.POST, headers={'Content-Type': 'application/x-www-form-urlencoded'})

然而,在这个例子中,服务器似乎只接收到一个名为data 的项目,其值为bar。我该如何解决这个问题?

【问题讨论】:

    标签: python google-app-engine urlfetch


    【解决方案1】:

    修改您的form_fields 字典,以便将具有相同名称的字段转换为列表,并将doseq 参数用于urllib.urlencode

    form_fields = {
       "data": ["foo","bar"]
    }
    
    form_data = urllib.urlencode(form_fields, doseq=True)
    

    此时,form_data'data=foo&data=bar',我认为这是您需要的。

    【讨论】:

    • 谢谢威尔,这很完美(很好和简单的解释)
    【解决方案2】:

    普通的python dict 无法处理这种事情;使用类似 webob.MultiDict 的东西:

    >>> z = webob.MultiDict([('foo', 'bar'), ('foo', 'baz')])
    >>> urllib.urlencode(z)
    'foo=bar&foo=baz'
    

    【讨论】:

      猜你喜欢
      • 2020-10-20
      • 2014-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-14
      • 2021-10-12
      相关资源
      最近更新 更多