urlfetch URL的未记录的最大长度?

时间:2014-08-21 07:03:48

标签: python google-app-engine urlfetch

我有一个试图获取长网址的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服务)。

1 个答案:

答案 0 :(得分:2)

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

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

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