【问题标题】:What's wrong with the following get json function [closed]以下get json函数有什么问题[关闭]
【发布时间】:2014-09-09 21:11:01
【问题描述】:

我已经使用有效的 API 密钥尝试了这段代码。

def get_json(url):
    opener = urllib2.build_opener()
    opener.addheaders = [('Authorization', 'apikey token=' + API_KEY)]
    return json.loads(opener.open(url).read())

但出现错误提示 "HTTP Error 414: Request-URI Too Large" 指向 return 语句。谁能建议可能出了什么问题。 谢谢。

【问题讨论】:

  • 向我们显示您请求的 URL。另请注意,您应该始终close() 打开连接。
  • 我请求的网址是data.bioontology.org/annotator
  • 没有请求参数?您能否编辑问题,添加用于检索 JSON 数据的完整代码?
  • 请找到修改后的代码。
  • 由于我没有API key,我无法自己测试,请尝试this code。如果它有效,那么它是一个 urllib2 错误(不太可能,仍然有可能),否则我们可能会遇到应用程序服务器编程错误,您应该与运行该服务的人员联系。对于 long 的任何相关定义,我认为您当前的 URL 不会被视为“太长”。 (编辑要点代码)

标签: python json api url get


【解决方案1】:

opener.open() 引发了错误,因为您尝试连接的 HTTP 服务器返回了 414 Request-URI Too Large 响应。

表示您的网址(包括查询参数)过长,服务器拒绝处理。实际上,当您在 URL 中发送超过 2000 个字符时,通常会达到 太长,但这实际上取决于服务器。

您需要使用较短的网址;也许您正试图将太多元素放入查询参数中。您调用的特定 API 占用的字符数略少于 30k,最大值。整个 URL(准确地说是 28820)。

这完全取决于您尝试调用的 API 以及您的选项。例如,服务器可能还支持发送 POST 请求,其中查询参数作为请求正文而不是在查询字符串中发送。

【讨论】:

  • 有什么办法可以解决吗?
  • @user3783999:使用较短的 URL。如果没有你在做什么的任何细节,我只能给你建议。
  • 我编辑了这个问题,添加了更多细节。谢谢。
  • @user3783999:你没有告诉我们你在哪里构建url
  • @user3783999:你如何在代码中调用get_json()?您在 there 使用的参数的值是多少?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-26
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-15
相关资源
最近更新 更多