【问题标题】:How to make a Trello session persist using Python as the client?如何使用 Python 作为客户端使 Trello 会话持续存在?
【发布时间】:2016-10-06 16:46:41
【问题描述】:

我正在尝试编写一个 Python 脚本,通过我的命令行,我可以:

  1. 登录到 Trello

  2. 使用Trello Python API 从 Trello 看板等检索数据。

我只能使用 Python 2.7.6,所以请不要提供任何 Python 3 建议——我将无法使用它们。

我可以使用 requests 模块登录 Trello;但是,为了能够使用 Trello API,我一直在检索用户密钥。

这是我目前正在做的事情:

import trello
import requests

# Not shown: retrieve username and password from user

sess = requests.Session()

loginData = {
    'method': 'password',
    'factors[user]': username,
    'factors[password]': password
}

TRELLO_LOGIN_URL = "https://trello.com/1/authentication"

resp = sess.post(TRELLO_LOGIN_URL, trelloLogin)     # resp => <Response [200]>

此时,resp.text 包含一个字典(在 JavaScript 或 Python 中同样适用),其中包含一个键 code,其值是很长的乱码字符串)。我假设这(以及响应对象中的 200 状态代码)意味着我成功登录。

所以,现在我(大概)已经登录了,我从 API 请求令牌 URL:

api = trello.TrelloApi(MY_API_KEY)
tokenUrl = api.get_token_url('MyApp') # => https://trello.com/1/authorize?key=<mykey>&name=MyApp&expiration=30days&response_type=token&scope=read,write

但是当我尝试使用该 URL 时:

sess.get(tokenUrl)

我得到的响应文本(由授权页面的 HTML 组成)有一个“登录”按钮,而不是我在浏览器中执行此操作时看到的“批准”按钮。对我来说,这表明 requests.Session 对象没有正确持久化。也许它在 get() 请求中使用了不正确的 cookie 或其他内容?

老实说,我并不关心问题的具体细节,只关心我必须做些什么来解决它。如何使会话持续到 get() 调用,以便我可以做下一部分?

(当然,完全有可能——甚至很可能——我的方法从一开始就不正确,但我找不到任何文档来告诉我应该做些什么不同,所以这是最好的我可以从我找到找到的东西中想出。如果有关于以另一种方式执行此操作的说明——但仍然是从命令行——请随时指出我。)

【问题讨论】:

  • 忘了说:TRELLO_LOGIN_URL = https://trello.com/1/authentication。添加到原始问题。

标签: python python-requests trello


【解决方案1】:

显然有 2 个调用来获取令牌:

  1. https://trello.com/1/authentication 其中包含响应中的code 字符串
  2. https://trello.com/1/authorization/session 使用之前检索到的code 发布,应返回 204,然后将token 设置为 cookie。 (您还需要提供一个dsc 字符串,有关详细信息,请尝试通过 chrome 开发工具检查请求。)

【讨论】:

  • 我看到了带有dsc 字符串的授权/会话帖子,但我不知道从哪里得到它。
  • @WilsonF dsc 字段似乎是服务器生成的用于 csrf 保护的字符串。只需先向https://trello.com/login 发出请求,然后您应该会在 cookie 中找到它。
  • 好的,我去看看,谢谢。项目优先级已被降级,因此可能需要一段时间。同时,这可能是我最接近完整答案的地方,所以我会接受。 :) 谢谢!
猜你喜欢
  • 2019-01-09
  • 2020-01-20
  • 1970-01-01
  • 1970-01-01
  • 2012-06-15
  • 1970-01-01
  • 2017-12-03
  • 2015-06-07
  • 2014-05-26
相关资源
最近更新 更多