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

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

如果您已设置无服务器 VPC 访问通道或使用 Sockets API,则需要阻止 URL Fetch 处理请求。URL Fetch 会导致发送到您的 VPC 网络或 Sockets API 的请求失败。停用 URL Fetch 后,标准 Python 库将处理 HTTP 请求。如果您需要 URL Fetch 为特定请求提供的功能,则可以直接将 urlfetch 库用于这些特定请求。

请求

App Engine 使用 URL Fetch 服务发出出站请求。 在 Python 中,您可以使用 httpliburlliburllib2 库发出 HTTP 请求;在 App Engine 应用中,每个库都将使用 URL Fetch 服务来执行这些请求。您还可以直接使用 urlfetch 库。

请求协议

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

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

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

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

请求方法

如果通过网址提取服务发出请求,则可以使用以下任意一种 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 秒。

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

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

安全连接和 HTTPS

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

在 Python API 中,URL Fetch 代理默认情况下不验证它正在联系的主机。您可以向 fetch() 方法添加可选的 validate_certificate 参数,以启用主机验证。

响应

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

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

在开发服务器上使用 URL Fetch

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

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

URL Fetch 的配额和限制

如需了解网址提取服务配额,请参阅配额。如需查看应用的当前配额使用情况,请前往 Google Cloud Console 中的“配额详情”页面。

前往“配额详情”页面

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

限制 数量
请求大小 10 MB
请求标头大小 16 KB(请注意,这将限制可在标头中指定的网址的最大长度)
响应大小 32 MB

后续步骤

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