假设我有一个类似下面的表格,带有一些隐藏的输入:
<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
词典中包含隐藏的输入?如果省略类型属性值为“hidden”的元素,是否可以提交POST请求?
如果网站的值设置为 EMPTY字符串,则网站甚至隐藏输入的目的是什么,例如上面Hidden1
示例中的myForm
元素。
编辑 - 下半场
在做了一些研究之后,我注意到每次访问页面时,一些隐藏的元素都有不同的值
即
<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请求,考虑到变化的元素值?
答案 0 :(得分:1)
我是否必须在postRequest字典中包含隐藏的输入?
不,您没有 来包含隐藏的输入。没有法律,条约或标准要求您包含任何特定的输入元素。
另一方面,如果你没有包含它们,那么你正在做一些与浏览器不同的事情,并且网站可能会注意到这一点。
如果省略类型属性值为“hidden”的元素,是否可以提交POST请求?
是的,你可以。您还可以省略类型为text
或button
的元素。网站如何回应完全取决于它。
如果网站的值设置为EMPTY字符串
,网站甚至隐藏输入的目的是什么?
网站开发人员的目的完全取决于他。您可能会询问您尝试提交的网站开发人员。
一个可能的目的是确定正在进行提交的表单。
这些额外的安全措施是否为网站?
再次询问网站的所有者。它可能是安全性,也可能是会话管理,它可能带有您的偏好。
..如果是这样,我如何以编程方式发送POST请求,考虑到变化的元素值?
获取包含表单的页面,解析该页面,并使用指定的表单变量提交表单。