麻烦“Python请求”用户名/密码登录

时间:2014-12-16 10:17:00

标签: python url passwords python-requests username

我试图编写一个程序,从我的密码保护成绩单中抓取数据并为我分析,因为我的大学成绩簿并不能自动计算平均值。我正在使用"请求"为了登录网站,但使用我当前的代码,似乎没有任何事情发生。我已经尝试了一些我在stackoverflow上找到的不同方法但尚未找到可用的代码。有人可以帮我看一下吗?感谢。


P.S。当我手动登录这个网站时,它看起来要带我去某种"授权"短暂的URL,然后它转发到登录后的主页。


from requests.adapters import HTTPAdapter
from requests.packages.urllib3.poolmanager import PoolManager
import ssl
class MyAdapter(HTTPAdapter):
    def init_poolmanager(self, connections, maxsize, block=False):
        self.poolmanager = PoolManager(num_pools=connections,
                                      maxsize=maxsize,
                                       block=block,
                                       ssl_version=ssl.PROTOCOL_TLSv1)


import requests
url = 'http://learn.ou.edu/d2l/m/login'
s = requests.Session()
s.mount('https://', MyAdapter())
payload = {
    'username': 'MYUSERNAME',
    'password': 'MYPASSWORD!'
}
r = s.get(url, auth=('MYUSERNAME', 'MYPASSWORD!'))
print r.status_code
print r.content

1 个答案:

答案 0 :(得分:0)

您填写的表单位于http://learn.ou.edu/d2l/m/login,但表单提交到http://learn.ou.edu/d2l/lp/auth/login/login.d2l - 您需要模拟提交该表单。我会确保我在那里有相同的信息。

删除我看到的表格:

<form method="post" enctype="application/x-www-form-urlencoded" action="/d2l/lp/auth/login/login.d2l" onsubmit="return false;">
  <input type="hidden" name="d2l_referrer" />
  <input type="hidden" name="target" value="/d2l/lp/ouHome/loginHome.d2l?isMobile=1" />
  <input type="hidden" name="loginPath" value="/d2l/m/login" />
  <input type="text" name="userName" />
  <input type="password" name="password" />
</form>

正如@ABri已经指出的那样,在提交之前使用一些j来搞乱它。当我提交表单(没有正确的用户名和密码)时,看起来好像没有更改,所以我尝试以最简单的形式点击表单。

import requests

s = requests.Session()
payload = {
    'd2l_referrer': '',
    'target': '/d2l/lp/ouHome/loginHome.d2l?isMobile=1',
    'loginPath': '/d2l/m/login',
    'userName': 'MYUSERNAME',
    'password': 'MYPASSWORD!'
}
r = s.POST('http://learn.ou.edu/d2l/lp/auth/login/login.d2l', data=payload)
print r.status_code
print r.content

如果没有un / pw,我就不能再进一步尝试了,看看你是如何继续下去的。