【问题标题】:Python urllib2 sending POST dataPython urllib2 发送 POST 数据
【发布时间】:2010-11-15 00:31:40
【问题描述】:

我正在尝试使用 urllib 发送 POST 数据,但问题通常是您对字段字典进行 urlencode,然后将其与请求一起发送。但是我必须发送到服务器的一些字段被命名为完全相同的名称,所以使用字典我最终会从字典中删除很多数据,因为你不能有两个具有相同名称的键并且不同的数据。

我的请求数据采用正确语法的字符串格式(例如 var=value&var=value2&...),我尝试将其与 urllib 请求一起发送,但每次都收到错误请求。有没有其他方法可以在发送前对数据进行 urlencode,这样我就不会得到 400?

【问题讨论】:

  • 您确定 400 是由于 POST 数据格式而不是其他原因(例如,用户代理标头)吗?

标签: python http


【解决方案1】:

urllib.urlencode() 可以采用元组列表,允许您为参数指定多个值:

>>> urlencode([("var", "value"), ("var", "value2")])
'var=value&var=value2'

或者使用带有列表作为值的地图:

>>> p = {"var": ["value", "value2"], "var2": ["yetanothervalue"]}
>>> urlencode([(k, v) for k, vs in p.items() for v in vs])
'var=value&var=value2&var2=yetanothervalue'

你甚至可以允许列表字符串作为值,虽然它变得不那么简洁了:

>>> p = {"var": ["value", "value2"], "var2": "yetanothervalue"}
>>> urlencode([(k, v) for k, vs in p.items()
...     for v in isinstance(vs, list) and vs or [vs]])
'var=value&var=value2&var2=yetanothervalue'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-13
    • 2016-03-11
    • 2019-08-09
    • 2011-06-21
    • 1970-01-01
    • 2016-07-31
    • 2013-08-24
    相关资源
    最近更新 更多