【发布时间】: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