2014-10-29 24 views
2

我想使用Python中很好的请求库发送帖子请求。我正在发送有效负载,如代码所示,但r.text打印语句显示myaccount.nytimes.com页面的html转储,这不是我想要的。任何人都知道发生了什么?无法使用python中的请求登录到我的nytimes帐户

payload = { 
    'userid': 'myemail', 
    'password': 'mypass' 
} 

s = requests.session() 
r = s.post('https://myaccount.nytimes.com/auth/login/?URI=http://www.nytimes.com/2014/09/13/opinion/on-long-island-a-worthy-plan-for-coastal-flooding.html?partner=rss', data=payload) 
print(r.text) 
+0

嗨,阿里,你是怎么得到这个工作的?我可以解析页面并获取隐藏的值,但不知道如何使用此信息和我的凭据进行身份验证? – Stefan 2016-04-07 22:22:24

+0

下面的答案适用于我@StefanJansen – 2016-04-07 22:57:25

+0

您是否已将从登录页面获得的令牌添加到上面的s.post()'请求或会话本身?后续页面请求为's.get()',不带参数? – Stefan 2016-04-07 23:05:26

回答

3

有几个隐藏<input>领域,你是从你的形式省略:

  1. is_continue
  2. expires
  3. token

token看起来这将是也许是必需的其他人不是。

并且可能还有remember这是窗体底部的“记住我”复选框。

token开始尝试逐步添加字段,直到它工作。

编辑注释:当您第一次访问登录页面时会提供令牌。因此,您需要执行初始GET至https://myaccount.nytimes.com/auth/login/,解析HTML(BeautifulSoup?)以获取令牌(和其他字段),然后POST回到服务器。或者你可以使用机械化来更轻松地处理这个问题。

+0

第一次访问登录页面时会提供令牌。因此,您需要对'https:// myaccount.nytimes.com/auth/login /'执行初始'GET',解析HTML(BeautifulSoup?)以获取令牌(和其他字段),然后返回“POST”到服务器。或者你可以使用[mechanize](http://wwwsearch.sourceforge.net/mechanize/)来更容易地处理这个问题。 – mhawke 2014-10-29 06:35:55

+0

谢谢,这一切工作。为了清楚起见,我在帖子中添加了您的评论。 – 2014-10-29 08:17:53