【问题标题】:How to call an API using Python Requests library如何使用 Python Requests 库调用 API
【发布时间】:2018-04-01 00:16:31
【问题描述】:

我不知道如何使用 python urllib 或 requests 正确调用此 api。

让我给你我现在的代码:

import requests
url = "http://api.cortical.io:80/rest/expressions/similar_terms?retina_name=en_associative&start_index=0&max_results=1&sparsity=1.0&get_fingerprint=false"
params = {"positions":[0,6,7,29]}
headers = { "api-key" : key,
            "Content-Type" : "application/json"}
# Make a get request with the parameters.
response = requests.get(url, params=params, headers=headers)

# Print the content of the response
print(response.content)

我什至将其余参数添加到 params 变量中:

url = 'http://api.cortical.io:80/rest/expressions/similar_terms?'
params = {
    "retina_name":"en_associative",
    "start_index":0,
    "max_results":1,
    "sparsity":1.0,
    "get_fingerprint":False,
    "positions":[0,6,7,29]}

我收到了这条消息:

已记录内部服务器错误 @ Sun Apr 01 00:03:02 UTC 2018

所以我不确定我做错了什么。您可以在这里测试他们的 api,但即使通过测试我也无法弄清楚。如果我去http://api.cortical.io/,点击 Expression 标签,点击 POST /expressions/similar_terms 选项然后粘贴 {"positions":[0,6, 7,29]} 在正文文本框中并点击按钮,它会给你一个有效的响应,所以他们的 API 没有任何问题。

我不知道我做错了什么。你能帮帮我吗?

【问题讨论】:

  • 您是否检查过这是否是 Cortical API 的问题,而不是您的代码?
  • 是的,我已经检查过了,因为您可以访问他们的网站并测试他们的 api,我在第 2 段到最后一段中谈到了如何做到这一点。他们的 api 启动了。
  • 我把你的网址复制并粘贴到我的浏览器中。它给了我相同的内部服务器错误消息。你也可以检查一下网址吗?
  • @troymyname00 好吧,你没有我的 api 密钥,但你可以去他们的网站 api.cortical.io 并在那里尝试 api。
  • 哦,我现在看到的一个问题是这是一个获取,但它应该是一个帖子。然而。改变并没有解决它。

标签: python api python-requests


【解决方案1】:

问题是您在params 字典中混合了查询字符串参数和发布数据。 相反,您应该为查询字符串数据使用params 参数,为您的帖子正文数据使用json 参数(因为内容类型是json)。

使用json 参数时,Content-Type 标头默认设置为“application/json”。另外,当响应为 json 时,您可以使用.json() 方法获取字典。

一个例子,

import requests

url = 'http://api.cortical.io:80/rest/expressions/similar_terms?'
params = {
    "retina_name":"en_associative",
    "start_index":0,
    "max_results":1,
    "sparsity":1.0,
    "get_fingerprint":False
}
data = {"positions":[0,6,7,29]}
r = requests.post(url, params=params, json=data)

print(r.status_code)
print(r.json())
200
[{'term': 'headphones', 'df': 8.991197733061748e-05, 'score': 4.0, 'pos_types': ['NOUN'], 'fingerprint': {'positions': []}}]

【讨论】:

    【解决方案2】:

    所以,我无法解释为什么第三方 API 中存在服务器错误,但我按照您的建议尝试直接使用 API UI,并注意到您使用的是一个完全不同的端点 /em> 比您尝试在代码中调用的那个。在您的代码中,您从 http://api.cortical.io:80/rest/expressions/similar_termsGET,但在 UI 中,您从 POSThttp://api.cortical.io/rest/expressions/similar_terms/bulk。是苹果和橙子。

    调用您在 UI 调用中提到的端点对我有用,对您的代码使用以下变体,这需要使用 requests.post,正如 t.m. 所指出的那样。 adam,payload的json参数,也需要封装在一个列表中:

    import requests
    url = "http://api.cortical.io/rest/expressions/similar_terms/bulk?retina_name=en_associative&start_index=0&max_results=1&sparsity=1.0&get_fingerprint=false"
    params = [{"positions":[0,6,7,29]}]
    headers = { "api-key" : key,
                "Content-Type" : "application/json"}
    # Make a get request with the parameters.
    response = requests.post(url, json=params, headers=headers)
    
    # Print the content of the response
    print(response.content)
    

    给予:

    b'[[{"term":"headphones","df":8.991197733061748E-5,"score":4.0,"pos_types":["NOUN"],"fingerprint":{"positions":[]}}]]'
    

    【讨论】:

      猜你喜欢
      • 2014-04-26
      • 1970-01-01
      • 1970-01-01
      • 2021-04-09
      • 2014-11-05
      • 2017-12-25
      • 2015-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多