如何使用Python的Requests模块“login”到一个网站?

我试图发布一个请求,使用Python中的请求模块login到一个网站,但它并没有真正的工作。 我是新来的…所以我不知道我是否应该做我的用户名和密码cookies或某种types的HTTP授权的事情,我发现(??)。

from pyquery import PyQuery import requests url = 'http://www.locationary.com/home/index2.jsp' 

所以现在,我想我应该使用“后”和cookies….

 ck = {'inUserName': 'USERNAME/EMAIL', 'inUserPass': 'PASSWORD'} r = requests.post(url, cookies=ck) content = r.text q = PyQuery(content) title = q("title").text() print title 

我有一种感觉,我正在做cookies事情错了…我不知道。

如果没有正确login,主页的标题应该出现在“Locationary.com”,如果是,则应该是“主页”。

如果你可以向我解释一些关于请求和cookie的东西,并帮我解决这个问题,我将不胜感激。 :d

谢谢。

…它还没有真正的工作。 好的…所以这就是你login之前HTML页面所说的内容:

 </td><td><img src="http://www.locationary.com/img/LocationaryImgs/icons/txt_email.gif"> </td> <td><input class="Data_Entry_Field_Login" type="text" name="inUserName" id="inUserName" size="25"></td> <td><img src="http://www.locationary.com/img/LocationaryImgs/icons/txt_password.gif"> </td> <td><input class="Data_Entry_Field_Login" type="password" name="inUserPass" id="inUserPass"></td> 

所以我觉得我做对了,但是输出仍然是“Locationary.com”

第二编辑:

我希望能够保持login很长一段时间,每当我请求在该域下的网页,我希望内容显示,如果我login。

如果您想要的信息在您login后立即指向的页面上…

让我们调用你的ckvariablespayload ,就像在python-requests文档中一样:

 payload = {'inUserName': 'USERNAME/EMAIL', 'inUserPass': 'PASSWORD'} url = 'http://www.locationary.com/home/index2.jsp' requests.post(url, data=payload) 

除此以外…

请参阅下面的https://stackoverflow.com/a/17633072/111362

我知道你已经find了另一个解决scheme,但是对于像我这样的人来说,find这个问题,寻找同样的东西,可以通过如下的请求来实现:

首先,如Marcus所做的那样,检查login表单的来源以获得三条信息 – 表单发布到的url以及用户名和密码字段的名称属性。 在他的例子中,他们在用户名和inUserPass。

一旦你得到了这个,你可以使用requests.Session()实例向loginURL发出一个post请求,并将你的login细节作为一个负载。 从会话实例发出请求与正常使用请求基本相同,只是增加持久性,允许您存储和使用cookie等。

假设您的login尝试成功,您可以简单地使用会话实例向网站发出进一步的请求。 标识您的cookie将被用来授权请求​​。

 import requests # Fill in your details here to be posted to the login form. payload = { 'inUserName': 'username', 'inUserPass': 'password' } # Use 'with' to ensure the session context is closed after use. with requests.Session() as s: p = s.post('LOGIN_URL', data=payload) # print the html returned or something more intelligent to see if it's a successful login page. print p.text # An authorised request. r = s.get('A protected web page url') print r.text # etc... 

让我试着简化一下,假设网站的url是http://example.com/ ,假设你需要填写用户名和密码进行注册,所以我们进入login页面,例如http:// example。 com / login.php,然后查看它的源代码,然后search它将在窗体中的动作URL标签

  <form name="loginform" method="post" action="userinfo.php"> 

现在采取userinfo.php绝对URL将是“ http://example.com/userinfo.php ”,现在运行一个简单的Python脚本

 import requests url = 'http://example.com/userinfo.php' values = {'username': 'user', 'password': 'pass'} r = requests.post(url, data=values) print r.content 

我希望这有助于别人某个地方的某个人。

找出用户名<...name=username.../>和密码<...name=password../>在网站表单上使用的input名称,并将其replace为以下脚本。 同时replaceURL指向所需的站点login。

login.py

 #!/usr/bin/env python import requests from requests.packages.urllib3.exceptions import InsecureRequestWarning requests.packages.urllib3.disable_warnings(InsecureRequestWarning) payload = { 'username': 'user@email.com', 'password': 'blahblahsecretpassw0rd' } url = 'https://website.com/login.html' requests.post(url, data=payload, verify=False) 

使用disable_warnings(InsecureRequestWarning)会在尝试login到具有未经validation的SSL证书的站点时,使脚本中的任何输出disable_warnings(InsecureRequestWarning)

额外:

要在基于UNIX的系统的命令行上运行这个脚本,将它放在一个目录(例如home/scripts ,并将此目录添加到~/.bash_profile或terminal使用的类似文件的path中。

 # Custom scripts export CUSTOM_SCRIPTS=home/scripts export PATH=$CUSTOM_SCRIPTS:$PATH 

然后在home/scripts/login.py创build一个到这个python scipt的链接

 ln -s ~/home/scipts/login.py ~/home/scipts/login 

closures你的terminal,开始一个新的,运行login

Interesting Posts