我是python的新手,我尝试自动登录网站,然后尝试下载文件。
我尝试过以下方法但无法登录。
方法
'r'
val intent = Intent(this, Page2::class.java)
startActivity(intent)
import requests
我将非常感谢任何帮助,我使用的是python 2.7
答案 0 :(得分:0)
我假设你有正确的网址提交表格。我从该网站注意到的一件事是
<input type="text" name="USERNAME" id="username" title="please enter your username here" class="input" style="width: 14em;">
我不确定他们是如何编写服务器端代码的,但您可以尝试使用name
属性包含所有大写字符而不是id
属性,
所以你的负载变成:
updated like below
更新,表单中仍然有一个最后隐藏的字段,也许你应该包含它(url包含option
值,但它不在POST
请求中,服务器端将无法识别它,你还应该包括用户代理字符串,以防万一:
payload = {
'USERNAME': 'xxxxxx',
'PASSWORD': 'xxxxxxx',
'option': 'login'
}
headers = {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'}
def test():
with requests.Session() as s:
p = s.post('https://service.rl360.com/scripts/customer.cgi?option=login',data=payload)
答案 1 :(得分:0)
首先,您没有给出错误/结果的任何指示。你能详细说明它的回归/说什么吗?这可能会进一步说明问题,但我认为你的第二个请求(对myAccount.php)只是说“未经授权”。
你必须记住,HTTP请求是完全无状态的,如果你发出两个请求,第二个请求对第一个请求一无所知......除非使用cookie。
从我所知道的,仅仅因为你可能已经在第一个请求上正确认证了,对myAccount.php的第二个请求对第一个认证请求没有任何概念。
您发出的第一个请求可能会返回某种cookie或令牌,表明您现在已经过身份验证。然后,您需要在下一次对经过身份验证的URL的请求中包含该令牌,以便服务器知道您可以继续。
尝试在p
中转储完整的回复,以查看已返回的内容。您也可以使用开发人员工具在Chrome中执行此操作 - &gt;网络选项卡。勾选Preserve Log
,然后手动登录该站点。然后回过头看看对你的POST的反应 - 希望你会看到一些东西,表明你现在已经过身份验证。然后,您需要在下一个请求中复制它。