将登录名从 mechanize 转移到 urllib 或 requests

Transfering login from mechanize to urllib or requests

我目前正在尝试将我的一些代码转移到 urllib3 或请求中。 urllib3 是减少导入模块的首选方法。

这是当前可用的代码。

payload = ["<username>", "<password>"

browser = mechanize.Browser()
browser.open(url)
browser.select_form('form1')
browser['j_username'] = payload[0]
browser['j_password'] = payload[1]
browser.submit()

到目前为止我尝试的是

with requests.Session() as session:


  #not working
  payload = { "j_username" : "<username>", "j_password" : "<password>" }
  req = session.post(url, data = payload)
  print(req.url)

  #also not working
  req = session.get(url, auth=("<username>", "<password>") )
  print(req.url)

同样无效:

payload = {     "lang": "de",   "j_username": "<username>",     "j_password": "<password>",     "_eventId_proceed": "" }

req = session.post(url, data = payload)

我总是得到相同的 url 返回,所以我无法登录。

有没有办法在 urllib / requests 中进行此登录,还是我必须坚持使用机械化? 我也想比较这些解决方案的速度。

我终于找到了解决方案,也许它对其他人也有帮助。 我必须执行一个获取请求并使用该请求中的 url 因为有一个重定向到 login-page 并且你不能直接打开它(我会看到一个页面,你可能会看到这个页面,因为您在浏览安全网站或应用程序时使用了后退按钮...)

#url1 = url that redirects to loginpage 
payload = { "lang": "de",   "j_username": "<username>",  "j_password": "<password>",     "_eventId_proceed": "" }
with requests.Session() as session:
    loginPage = session.get(url1)
    afterLogin = session.post(loginPage.url, data = payload)
    wantedPage = session.get(<url of wanted page>)