【发布时间】:2013-09-18 20:14:12
【问题描述】:
假设我有一个像下面这样带有一些隐藏输入的表单:
<form id="myForm" method="post" action="http://www.X.Y/index.php?page=login>
<input type="hidden" name="Hidden1" value="" />
<input type="hidden" name="Hidden2" value="abcdef" />
<input type="hidden" name="Hidden3" value="1234" />
<input type="text" name="firstTextBox" value=""/>
<input type="button" name="clickButton" value="OK"/>
</form>
我会通过以下方式运行 python POST 请求:
import requests
s = requests.Session()
postRequest = {'Hidden1': '',
'Hidden2': 'abcdef',
'Hidden3': '',
'firstTextBox': 'Typed in first text box',
'clickButton': 'OK'
}
s.auth = HttpNtlmAuth(username, password)
s.post(url, data=manufacturingRequest)
我的问题是,我是否必须在 postRequest 字典中包含隐藏的输入?如果省略 type 属性值为“hidden”的元素,是否可以提交 POST 请求?
如果网站的值设置为 EMPTY 字符串(例如上面myForm 示例中的Hidden1 元素),那么网站即使具有隐藏输入的目的是什么。
编辑 - 下半场
经过一番研究,我注意到每次访问页面时,一些隐藏元素的值都不同
即
<input type="hidden" name="__REQUESTDIGEST" id="__REQUESTDIGEST" value="0xEB8842A77FE88CA990D2EA0D4BAA0392C13FCEF3DCF3250EBF575B90C03BFBC9AD4D61180DA81DF7B09144BBB04BBFF1565C2ADEE650CCC3D81B149034E711A4,18 Sep 2013 19:48:18 -0000" />
有时间戳
还有
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="SOME+VERY+LONG+RSA+STRING">
它有一些类似 RSA 的字符串作为它的值
如果我尝试提交与这些不同的值的 POST,网站会给我一个 200 错误代码。这些是网站的额外安全措施吗?
..如果是这样,我如何以编程方式发送 POST 请求,考虑到元素值的变化?
【问题讨论】:
标签: python html post hidden-field