【问题标题】:Python and Requests module, correct syntax for 'payload' in url-encoded POST methodPython 和请求模块,url 编码的 POST 方法中“有效负载”的正确语法
【发布时间】:2015-10-21 12:47:15
【问题描述】:

我正在使用请求模块和 Python 3。 当我在 Chrome 中检查时,如果解析的表单数据列为:

   list_class_values[notice][zipstate]:
   list_class_values[notice][type][]:
   list_class_values[notice][keywords]:colorado 

在上述情况下,我正在搜索“科罗拉多”。 给定以下代码 sn-p,在“有效负载”部分列出它们的正确语法是什么? 内容类型是“application/x-www-form-urlencoded”。

payload = {"list_class_values[notice][zipstate]":"None", "list_class_values[notice][type][]":"None", "list_class_values[notice][keywords]":"colorado"}
r = requests.post(url='http://www.example.com', payload=payload, headers=headers)
print(r.content)

我需要一个元组吗?例如"list_class_values(notice,keywords)":"colorado" ? 因为当我更改关键字时数据不会改变..

【问题讨论】:

  • 其他字段是空白字符串,而不是字符串"None"。否则字段名称是正确的。
  • 方括号是 Ruby-on-Rails 和 PHP 约定;没有描述这些的标准,但方括号会被此类服务器解析以生成嵌套数组结构。

标签: python-3.x post python-requests


【解决方案1】:

我认为这是其他领域的问题。它们的值是空字符串,而不是字符串"None"

payload = {
    "list_class_values[notice][zipstate]": "",
    "list_class_values[notice][type][]": "",
    "list_class_values[notice][keywords]": "colorado"
}

表单域名称在其他方面是正确的;该语法是 Ruby on Rails 和 PHP 使用的约定,但不是标准。支持该语法的服务器将键解析为数组映射(Python 术语中的字典)。见Form input field names containing square brackets like field[index]

请注意,您需要将此传递给 POST 正文的 data 参数(没有 payload 关键字参数,您应该得到一个异常):

r = requests.post(url='http://www.example.com', data=payload, headers=headers)

【讨论】:

  • 是的,这有效,即使用“”并将参数从“有效负载”更改为“数据”。谢谢你,Martijn。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-01
  • 1970-01-01
  • 2015-07-02
  • 1970-01-01
  • 1970-01-01
  • 2014-09-27
相关资源
最近更新 更多