Python请求 - POST需要隐藏的输入?

时间:2013-09-18 20:14:12

标签: python html post hidden-field

假设我有一个类似下面的表格,带有一些隐藏的输入:

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

1 个答案:

答案 0 :(得分:1)

  
    
      

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

    
  

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

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

  
    
      

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

    
  

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

  
    
      

如果网站的值设置为EMPTY字符串

,网站甚至隐藏输入的目的是什么?     
  

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

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


  
    
      

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

    
  

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

  
    
      

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

    
  

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