适用于旧版捆绑服务的 URL Fetch

本页面介绍了 App Engine 应用如何发出 HTTP 和 HTTPS 请求和接收响应。如需通过查看代码示例来了解如何从 App Engine 应用发出 HTTP 和 HTTPS 请求,请参阅发出 HTTP(S) 请求

请求

在 App Engine Java 8 运行时中,您可以使用 java.net.URLConnection 抽象类以及 Java 标准库中的相关类,从 Java 应用建立 HTTP 和 HTTPS 连接。

或者,您也可以使用 App Engine URL Fetch API,通过 URL Fetch API 实现 URLConnection 中定义的方法。如需了解使用原生 Java 类与使用 URL Fetch API 的对比情况,请参阅在 Java 8 中使用标准 Java 调用(而非 URL Fetch)的好处

请求协议

应用可以使用 HTTP 或 HTTPS 提取网址。通过查看目标网址中的协议,可以推断具体应使用哪种协议。

需要提取的网址可以使用以下范围内的任意端口号:

  • 80-90
  • 440-450
  • 1024-65535

如果网址中未提及端口,则使用协议默认的端口。HTTP 请求使用端口 80,而 HTTPS 请求使用端口 443

请求方法

如果您通过标准 Java java.net.URLConnection 类发出请求,则可以使用任何受支持的 HTTP 方法。

如果通过 URL Fetch 服务发出请求,则可以使用以下任意一种 HTTP 方法:

  • GET
  • POST
  • PUT
  • HEAD
  • DELETE
  • PATCH

请求可以包含 HTTP 标头,对于 POSTPUTPATCH 请求,还可以包含负载。

请求代理

请注意,URL Fetch 服务使用符合 HTTP/1.1 规范的代理来提取结果。

为了防止应用造成请求无限递归的情况,不允许请求处理程序提取自己的网址。由于使用其他方法也可能导致无限递归,因此,请谨慎决定是否允许您的应用为用户提供的网址提取请求。

请求标头

您的应用可以为传出请求设置 HTTP 标头。

发送 HTTP POST 请求时,如果用户未明确设置 Content-Type 标头,系统会将标头设置为 x-www-form-urlencoded。这是 Web 表单使用的内容类型。

出于安全考虑,应用无法修改以下标头:

  • Content-Length
  • Host
  • Vary
  • Via
  • X-Appengine-Inbound-Appid
  • X-Forwarded-For
  • X-ProxyUser-IP

App Engine 会根据具体情况将这些标头设置为准确的值。例如,App Engine 通过请求数据计算 Content-Length 标头,并在发送之前将其添加到请求中。

下列标头会标明发出请求的应用的 ID:

  • User-Agent。此标头可以修改,但 App Engine 将附加一个标识符字符串,以使服务器能够识别 App Engine 请求。附加的字符串格式为 "AppEngine-Google; (+http://code.google.com/appengine; appid: APPID)",其中 APPID 是应用的标识符。
  • X-Appengine-Inbound-Appid。此标头无法修改,如果遵循重定向参数设置为 False,则通过 URL Fetch 服务发送请求时会自动添加此标头。

请求超时

您可以为请求设置截止时限或超时。默认情况下,请求的超时为 10 秒。HTTP(S) 请求的截止时限是 60 秒,任务队列和 Cron 作业请求的截止时限同样也是 60 秒。当使用 URL Fetch 的 URLConnection 抽象类时,该服务使用连接超时 (setConnectTimeout()) 和读取超时 (setReadTimeout()) 作为截止时限。

您可以发送同步请求和异步请求。以下行为适用于 URL Fetch API:

  • 同步请求:提取调用一直等到远程主机返回结果,然后将控制权交还给应用。如果超过了提取调用的最长等待时间,则该调用引发异常。
  • 异步请求:URL Fetch 服务启动请求,然后立即返回一个对象。应用可以在提取网址的同时执行其他任务。应用需要结果时,将针对该对象调用一个方法,该方法等待请求完成(如有必要),然后返回结果。在请求处理程序退出时,如果任何 URL Fetch 请求处于未完成状态,应用服务器将等待所有剩余请求返回或到达截止时间,然后再向用户返回响应。

安全连接和 HTTPS

通过使用 HTTPS 连接到安全服务器,您的应用可以安全地提取网址。请求和响应数据以加密形式通过网络进行传输。

默认情况下,URL Fetch 代理会验证其联系的主机。借助此行为,API 可以检测使用 HTTPS 时 App Engine 与远程主机之间的中间人攻击。

响应

如果您使用的是 URL Fetch API,那么请注意,URL Fetch 服务将返回所有响应数据,包括响应、代码、标头和正文。

默认情况下,如果 URL Fetch 服务收到包含重定向代码的响应,该服务将进行重定向。服务最多遵循五个重定向响应,然后返回最终资源。您可以指示 URL Fetch 服务不遵循重定向,而是返回应用的重定向响应。

在开发服务器上使用 URL Fetch

当您的应用在计算机的 App Engine 开发服务器上运行时,对 URL Fetch 服务的调用将在本地处理。开发服务器使用您的计算机用于访问互联网的任何网络配置,直接从您的计算机连接到远程主机以提取网址。

在测试提取网址的应用功能时,请确保您的计算机可以访问远程主机。

URL Fetch 的配额和限制

对于 Java 运行时,您可以使用标准 Java java.net.URLConnection API,而非 URLFetch(以下配额和限制注意事项不适用于 URLFetch)。

如需了解 URL Fetch 服务配额,请参阅配额。如需查看应用的当前配额使用情况,请前往Google Cloud 控制台中的“配额详情”页面。

前往“配额详情”页面

此外,使用 URL Fetch 服务时存在以下限制:

限制 金额
请求大小 10 MB
请求标头大小 16 KB(请注意,这将限制可在标头中指定的网址的最大长度)
响应大小 32 MB
截止时限(请求处理程序) 60 秒
截止时限(任务队列和 Cron 作业处理程序) 60 秒

后续步骤

运行代码示例,并参阅发出 HTTP(S) 请求,获取有关如何从应用发出请求的指导。