3

假设我有一个像下面这样带有一些隐藏输入的表单:

<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 请求,考虑到元素值的变化?

4

1 回答 1

2

我必须在 postRequest 字典中包含隐藏的输入吗?

不,您不必包含隐藏的输入。没有法律、条约或标准要求您包含任何特定的输入元素。

另一方面,如果您没有包含它们,那么您所做的事情与浏览器所做的事情不同,网站可能会注意到这一点。

如果省略 type 属性值为“hidden”的元素,是否可以提交 POST 请求?

是的你可以。您也可以省略类型为textor的元素button。网站如何响应完全取决于它。

如果网站的值设置为 EMPTY 字符串,甚至隐藏输入的网站的目的是什么,

网站开发人员的目的实际上取决于他们。您可能会询问您尝试提交的网站的开发人员。

一个可能的目的是确定哪个表单正在提交。


这些是网站的额外安全措施吗?

再次,询问网站的所有者。它可能是安全性,可能是会话管理,或者它可能带有您的偏好。

..如果是这样,我如何以编程方式发送 POST 请求,考虑到元素值的变化?

获取包含表单的页面,解析该页面,并使用指定的表单变量提交表单。

于 2013-09-18T20:20:19.820 回答