【问题标题】:Python Requests - Hidden input required to POST?Python 请求 - POST 需要隐藏输入?
【发布时间】: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


    【解决方案1】:

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

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

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

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

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

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

    网站开发者的目的完全取决于他们。您可以询问您尝试提交的网站的开发人员。

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


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

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

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

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

    【讨论】:

    • 嗯,这取决于。我已经更新了我的问题,也许你可以看看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多