【问题标题】:Undocumented max length for urlfetch URL?urlfetch URL的未记录最大长度?
【发布时间】:2014-08-21 07:03:47
【问题描述】:

我有一个尝试获取长网址的 App Engine 应用。经过试验,似乎出于某种原因,App Engine 将获取的 url 的长度限制为 2047。这是错误的堆栈跟踪:

File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/urlfetch.py", line 270, in fetch
    return rpc.get_result()
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 612, in get_result
    return self.__get_result_hook(self)
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/urlfetch.py", line 386, in _get_fetch_result
    'Invalid request URL: ' + url + error_detail)
InvalidURLError: Invalid request URL: <LONG URL>

该限制也适用于开发环境。我在 App Engine sdk (urlfetch_stub.py) 中找到了以下代码:

_MAX_URL_LENGTH = 2048

if len(request.url()) >= _MAX_URL_LENGTH:
  logging.error('URL is too long: %s...' % request.url()[:50])
  raise apiproxy_errors.ApplicationError(
      urlfetch_service_pb.URLFetchServiceError.INVALID_URL)

为什么存在这个限制?有没有办法绕过它?获取非常长的 url 对我来说非常重要(我正在使用需要长 url 的 REST API 服务)。

【问题讨论】:

  • 这篇文章中有趣的 cmets 似乎建议 url 超过 2000 个字符通常是个坏主意stackoverflow.com/questions/417142/…
  • 谢谢@GwynHowell,我以前看过这篇文章。它主要是指浏览器和搜索引擎的限制。就我而言,这是一个 REST API 调用,我知道它没有 url 长度限制,所以我认为 App Engine 没有任何理由强制实施限制。

标签: python google-app-engine urlfetch


【解决方案1】:

这是一个已报告的问题,将来可能会解决。所以我猜你现在必须等待,或者使用某种形式的 URL 缩短(糟糕)。

您可以看到问题here 和相关的堆栈问题here

简而言之,该限制已添加到存根中以匹配 GAE 上的实现,因此至少您很快就发现了这个问题。我不知道为什么它是有限的。

【讨论】:

    猜你喜欢
    • 2022-06-17
    • 2012-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-12
    • 2018-04-10
    • 1970-01-01
    • 2012-12-19
    相关资源
    最近更新 更多