总结 - 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
在响应中未选中(我希望,这就是你的意思)。