【问题标题】:How to use Requests Python module to make curl calls如何使用 Requests Python 模块进行 curl 调用
【发布时间】:2014-11-05 23:50:28
【问题描述】:

我需要使用进行 cURL 调用的 API。此处显示的 API:https://www.pivotaltracker.com/help/api/rest/v5。我在 Python 2.7 中编码并下载了 Requests 模块以用于 cURL 调用,但是我不确定如何执行此操作。这是我目前所拥有的:

import requests

username = 'my_username'
password = 'my_password'
url = 'https://www.pivotaltracker.com/n/projects/my_project_number'

r = requests.get(url, auth=(username, password))

现在我有了响应 r,我该如何使用它来进行 cURL 调用以使用 API 函数,例如 GET /projects/{project_id}/epics/{epic_id} 函数。此函数的 cURL 调用是:

export TOKEN='your Pivotal Tracker API token'
export PROJECT_ID=99

curl -X GET -H "X-TrackerToken: $TOKEN" "https://www.pivotaltracker.com/services/v5/projects/$PROJECT_ID/epics/4"

感谢您提供的任何帮助!

编辑(感谢@Rob Watts) 现在这是我的代码:

import requests

username = 'my_username'
password = 'my_password'
url = 'https://www.pivotaltracker.com/services/v5/me'

r = requests.get(url, auth=(username, password))
response_json = r.json()
token = response_json['api_token']

project_id = 'my_project_id'
url = 'https://www.pivotaltracker.com/services/v5/projects/{}/epics/1'

r = requests.get(url.format(project_id), headers={'X-TrackerToken':token})

print r.text

但它仍然无法正常工作。这是输出:

{
  "code": "unfound_resource",
  "kind": "error",
  "error": "The object you tried to access could not be found.  It may have been removed by another user, you may be using the ID of another object type, or you may be trying to access a sub-resource at the wrong point in a tree."
}

但根据文档,我希望是这样的:

{
    "created_at": "2014-08-26T12:00:00Z",
    "description": "Identify the systems and eliminate the rebel scum.",
    "id": 1,
    ...
}

【问题讨论】:

  • 确保您使用的是正确的项目 ID。此外,一般来说,如果后续问题无法放入评论中,您应该提出一个新问题。
  • 我检查了,我的 project_id 是正确的。我尝试的一个有趣的事情是把这个网址放在浏览器中:pivotaltracker.com/services/v5/projects/my_project_id/epics/1 但这也返回了同样的错误
  • 也许您没有 id 为 1 的史诗。使用 /services/v5/projects/my_project_id/epics 获取现有的史诗。
  • ... D'OH 我以为它们只是按数字排序的。当然不是。感谢您提供的所有帮助并发现我的愚蠢错误。我很感激。

标签: python python-2.7 curl python-requests pivotaltracker


【解决方案1】:

您应该首先调用“/me”端点,然后从响应中提取 API 令牌:

import requests

username = 'my_username'
password = 'my_password'
url = 'https://www.pivotaltracker.com/services/v5/me'

r = requests.get(url, auth=(username, password))
response_json = r.json()
token = response_json['api_token']

除了 API 令牌之外,您还可以从该端点获取其他一些东西。看看the documentation for that endpoint 看看是否还有其他需要。

获得 API 令牌后,所有其他调用都将相当简单。例如:

project_id = 'your_project_id' # could get this from the previous response
r = requests.get('https://www.pivotaltracker.com/services/v5/projects/{}/epics/4'.format(project_id), headers={'X-TrackerToken':token})

我将解释他们在此示例中的 cURL 调用部分以及它们如何翻译:

export VARNAME

设置一个变量供 cURL 调用使用。你看到$VARNAME 的地方就是变量被使用的地方。

-X GET

我不知道他们为什么包含这个。这只是指定使用 GET,这是 cURL 的默认值。使用requests.get 可以解决这个问题。但是,对于具有-X POST 的那些,您将使用requests.post 等。

-H "X-TrackerToken: $TOKEN"

这指定了一个标题。对于请求,我们使用 headers 关键字参数 - headers={key:value}。在这个具体的例子中,我们有headers={'X-TrackerToken':token}

"https://..."

网址。这是第一个论点。可以使用字符串的format 方法插入变量(例如您的示例中的$PROJECT_ID)。

【讨论】:

  • 感谢您的回答。如果您不介意,我想知道您是如何转换的,例如您如何知道将令牌放入标头中,而不是项目 ID。
  • 非常有帮助!非常感谢。我一直在寻找那个翻译几个小时,所以再次感谢。最后一个问题,键:值对的键只是':'之前的字符串?所以对于 -H "X-TrackerToken: $TOKEN" 它将是 'X-TrackerToken'
  • 为此,“X-TrackerToken”是key,token是value。我猜它实际上不会是“TOKEN”。
  • 抱歉,还有一个问题。我如何合并身份验证部分?我应该只发出两个不同的 GET 请求吗?还是我将身份验证参数放在同一个 GET 调用中,如下所示: r = requests.get(url.format(project_id), auth=(username, password), headers={'X-TrackerToken':token})跨度>
  • 看起来您需要从对“/services/v5/me”的调用中获取令牌,然后使用它。我会将其添加到我的答案中。
猜你喜欢
  • 2016-10-11
  • 1970-01-01
  • 1970-01-01
  • 2021-04-09
  • 1970-01-01
  • 1970-01-01
  • 2012-10-20
  • 2021-07-14
  • 1970-01-01
相关资源
最近更新 更多