在Python中发出POST请求

时间:2016-02-24 01:55:47

标签: python post python-requests

这是我正在使用的表格。

<form name="form1" method="post" action="http://lumbininet.com.np/eservice/index.php/login/processLogin" id="login_form">
<input type="hidden" name="logout" value=0>
<table>                               
<tr>
<td colspan="2" class="sub-body-txt" height="10"> 

</td>
</tr>
<tr> 
<td width="135" colspan="2" class="sub-body-txt"><p>Username</p></td>
</tr>
<tr> 
<td colspan="2"><input name="username" type="text" id="username" class="sub-body-txt" size="20"></td>
</tr>

<tr> 
<td colspan="2" class="sub-body-txt"><p>Password:</p></td>
</tr>
<tr> 
<td colspan="2"><input name="password" type="password" id="password" AUTOCOMPLETE="off" class="sub-body-txt" size="20"></td>
</tr>
<tr>
<td>&nbsp;
<input type="hidden" name="port" value="110">
<input type="hidden" name="rootdir" value="">
</td>
</tr>

<tr> 
<!-- <td colspan="2"><input type="button" value="Login" src="/main/icons/buttn_login.gif"  style="width:100px; " name="Submit" id="login_btn"></td> -->
<td colspan="2"><input type="submit" value="Login" src=/main/icons/buttn_login.gif" style="width:100px; border-radius:2px; background:#000fff; color:white "name="Submit" id="login_btn"></td>
</tr>
<tr> 
<td height="15" colspan="2" class="s-body-txt-lnk">&nbsp;</td>
</tr>
</table>
</form>

它有四个字段可以填写“用户名”,“密码”,“端口”和“rootdir”。 我正在向此页面发出POST请求:

import requests
proxies = {
    "http":"http://heed:ravi@172.31.103.29:3128",
    "https":"https://heed:ravi@172.31.103.29:3128"
    }

headers = { 'Accept':'*/*',
            'Accept-Language':'en-US,en;q=0.8',
            'Cache-Control':'max-age=0',
            'Connection':'keep-alive',
            'Proxy-Authorization':'Basic ZWRjZ3Vlc3Q6ZWRjZ3Vlc3Q=',
            'If-Modified-Since':'Fri, 13 Nov 2015 17:47:23 GMT',
            'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36'
            }


with requests.Session() as c:
    url = 'http://lumbininet.com.np/eservice/index.php/login'
    c.get(url, proxies=proxies, headers=headers)
    payload = {'username': 'myusername', 'password': 'mypassword', 'port':'110', 'rootdir':''}
    c.post(url, data = payload, proxies=proxies, headers=headers)
    r = c.get('http://lumbininet.com.np/eservice/index.php/login/processLogin', proxies=proxies, headers=headers)
    print (r.content)

但是当我运行它时,没有任何内容被打印出来。 我究竟做错了什么 ? 我正在发出POST请求错误的链接吗? 那些字段值(特别是'隐藏'类型)呢?

请帮忙。

2 个答案:

答案 0 :(得分:0)

根据HTML,为void foo(const CustomType& x, const CustomType& y){ x * y; // Compile error, cannot call non-const operator * on const object. } 定义的actionform

因此,您的action="http://lumbininet.com.np/eservice/index.php/login/processLogin"应该发送到此网址,而不是您定义的网址(POST

答案 1 :(得分:0)

我只能看到,POST请求时您的标题缺少referer,有时非常重要。

尝试在发送POST请求时将这些内容添加到标题中。

'Host':'lumbininet.com.np',
'Origin':'http://lumbininet.com.np',
'Referer':'http://lumbininet.com.np/eservice/index.php/login',
'Content-Type':'application/x-www-form-urlencoded'

此外,作为预防措施,请尝试在第一次GET请求后打印状态代码,并确保其为200。

希望有所帮助。