Python - 将发布请求发送到登录表单

时间:2017-08-18 20:21:08

标签: python post cookies request

我正在尝试将POST消息发送到设备的Web界面,以便我可以使用cookie来卷曲设备上的文件(设备的API非常有限)。

问题:我的POST请求似乎不起作用,因为代码返回登录源页面内容并且没有cookie。我认为我使用的表单数据不正确但不确定有什么问题?

我想如果POST请求有效,我会看到状态码302?我收到了Chrome开发工具的POST请求,链接如下。

非常感谢任何帮助。

Python代码

import requests
import urllib3

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
headers = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
        'Content-Type':'application/x-www-form-urlencoded',
        'Origin' : 'https://172.110.35.61',
        'Referer': 'https://172.110.35.61/',
        'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36',}

login_url = 'https://172.110.35.61/'
payload = {'_z': '0', 'page':'login', 'username': 'TestAccount', 'passwd':'stack!!', 'submit':' Log In'}

my_request = requests.post(login_url, data=payload, verify=False)
print my_request.text
print my_request.cookies.values()

设备登录网络界面的源代码

    <div id="login">
    <form action="/" name="login" method="post">
    <input type=hidden name="_z" value="0">
    <input type="hidden" name="page" value="login">
   <table>
   <tr>
     <td align="right">
       Username:
     </td>
     <td>
       <input class="username" type="text" name="username"maxlength="18" size="18" style="width: 15em;" value="">
     </td>
   </tr>
   <tr>
     <td align="right">
       Password:
     </td>
     <td>
       <input class="passwd" type="password" name="passwd" maxlength="18" size="18" style="width: 15em;" value="">
     </td>
   </tr>

   <tr><td colspan="2"></td></tr>

   <tr>
     <td>
       <input class="button" type="submit" name="submit" value=" Log In ">
     </td>
   </tr>
   </table>
   </form>

   </div>
   <script type=text/javascript>
           document.login.username.focus();
       document.cookie="noscript=0;";
   </script>

所以我看到了来自行动:<form action="/" name="login" method="post">

当我使用表单数据登录时,这是POST请求: POST Request

1 个答案:

答案 0 :(得分:0)

我设法解决了这个问题,如果我在帖子标题中传递了一个带有32个字符的PHPSESSID,我就可以对探测器进行身份验证。我还使用requests.session在成功通过身份验证后能够卷曲数据。

php_session = 'PHPSESSID={}; noscript=0'.format('1'*32)