urlfetch URL的未记录最大长度?

1 投票
1 回答
1014 浏览
提问于 2025-04-18 18:01

我有一个在App Engine上运行的应用,它试图获取一个很长的链接。经过一些实验,我发现App Engine似乎把获取的链接长度限制在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)

为什么会有这个限制呢?有没有办法绕过它?对我来说,获取非常长的链接是非常重要的(我在使用一个需要长链接的REST API服务)。

1 个回答

2

这是一个已经被报告过的问题,可能会在未来得到解决。所以我想你现在只能等着,或者使用一些网址缩短工具(虽然这不是个好主意)。

你可以在这里查看这个问题,以及相关的讨论在这里

简单来说,这个限制是为了和GAE上的实现保持一致,所以至少你很快就发现了这个问题。我也不知道为什么会有限制。

撰写回答