1

如何传递 url 并取消选中 post 请求中的复选框。

HTML 如下所示:

<input type="checkbox" name="encodeURL" ID="encodeURL" checked="checked">

我正在使用requests,一个 3rd 方 python 库,如下所示:

payload = {'u': 'http://www.google.com', 'encodeURL': '0'}
r = requests.post('http://www.website.com/', data=payload)

到目前为止,将 'encodeURL' 设置为 '0'、'unchecked'、'' 和 0 不会在未选中复选框的情况下发布请求。如何找到传递给“encodeURL”以取消选中复选框的值?

4

2 回答 2

3

总结 - TL/DR

取消选中一个框 -在有效负载中排除

payload = {'u': 'http://www.google.com'}
r = requests.post('http://www.website.com/', data=payload)

选中一个框 -其包含在有效负载中

payload = {'u': 'http://www.google.com', 'allowCookies': 'on'}
r = requests.post('http://www.website.com/', data=payload)

解释

需要将 html 标记(在您的示例中默认设置复选框)与完全正交的服务器端行为区分开来。您显然想要做的是在您提交带有未选中复选框的表单时模仿浏览器的行为。在这种情况下,服务器不会收到任何 encodeURL参数,只是从请求中省略它。

另请参阅HTML 规范

提交表单时,只有“on”复选框控件才能成功

更新

在使用 TamperData 插件调查您的特殊情况后,我发现它可能与限速处理 cookie 的方式有关,因此这不是请求库的错误,只是站点特性。这段代码似乎工作:

s = requests.session()
s.get('http://speed-limit.info/index.php')  # getting the cookies
response = s.post('http://speed-limit.info/includes/process.php?action=update', 
                  data={'u': 'stackoverflow.com', 'allowCookies': 'on'},
                  allow_redirects=True)

然后encodeURL在响应中未选中(我希望,这就是你的意思)。

于 2012-11-14T08:07:01.680 回答
-1

// 查看

document.getElementById("encodeURL").checked = true;

// 取消选中

document.getElementById("encodeURL").checked = false;

jQuery (1.6+):

// 查看

$("#encodeURL").prop("checked", true);

// 取消选中

$("#encodeURL").prop("checked", false);
于 2012-11-14T07:22:53.943 回答