假设我有一个像下面这样带有一些隐藏输入的表单:
<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 string (例如上面示例中的Hidden1
元素) ,网站甚至具有隐藏输入的目的是什么。myForm
编辑 - 下半场
经过一番研究,我注意到每次访问页面时,一些隐藏元素的值都不同
IE
<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 请求,考虑到元素值的变化?