全部产品
云市场

PHP HTTP 函数

更新时间:2020-03-29 20:14:47

在函数计算中使用 PHP 编程,需要定义一个函数作为入口函数。本文介绍了 PHP HTTP 函数,为函数设置 HTTP 触发器后,可以方便处理发来的 HTTP 请求。

HTTP 函数定义

以下代码示例定义了一个基本的 PHP HTTP 入口函数。

  1. <?php
  2. use RingCentral\Psr7\Response;
  3. function handler($request, $context): Response{
  4. /*
  5. $body = $request->getBody()->getContents();
  6. $queries = $request->getQueryParams();
  7. $method = $request->getMethod();
  8. $headers = $request->getHeaders();
  9. $path = $request->getAttribute("path");
  10. $requestURI = $request->getAttribute("requestURI");
  11. $clientIP = $request->getAttribute("clientIP");
  12. */
  13. return new Response(
  14. 200,
  15. array(
  16. "custom_header1" => "v1",
  17. "custom_header2" => ["v2", "v3"],
  18. "Set-Cookie" => urlencode("test php") . '=' . urlencode('test;more')
  19. ),
  20. "hello world"
  21. );
  22. }

注意:建议您所有的响应头都放在构造响应对象的参数里面,例如上面示例,不要单独使用能改变 header 的方法,例如 headersetcookie 等。

$context 参数

$context 参数与事件函数接口的 $context 接口相同。

$request 参数

$request 遵循 PSR(HTTP message interfaces)标准。更多详情请参见 PSR-7-http-message。具体的代码定义遵循 PSR Http Message

以下为 $request 参数携带的可用信息代码示例。

  1. <?php
  2. $queries = $request->getQueryParams();
  3. $method = $request->getMethod();
  4. $headers = $request->getHeaders();
  5. $path = $request->getAttribute("path");
  6. $requestURI = $request->getAttribute("requestURI");
  7. $clientIP = $request->getAttribute("clientIP");
  8. $body = $request->getBody()->getContents();

参数说明

参数 类型 描述
$headers Array 存放来自 HTTP 客户端的键值对,键值对中的值为数组类型,遵循 PSR-7 标准。
$path String HTTP URL 中的路径。
$queries Array 存放来自 HTTP URL 中的查询部分的键值对,键值对中的值可以是字符串或数组。
$method String HTTP 方法。
$clientIP String HTTP 客户端的 IP 地址。
$requestURI String 请求中除 host 以外的 url。
$body String HTTP 请求中的请求体数据。

说明:函数计算会默认使用一些系统定义字段,不支持自定义。因此,您的 Headers 的键中不能使用系统定义字段,例如 accept-encodingconnectionkeep-aliveproxy-authorizationtetrailertransfer-encoding 和以 x-fc- 开头的字段。

$response 参数

$response 遵循 PSR(HTTP message interfaces)标准。以下代码为 Response 构造示例。

  1. <?php
  2. /**
  3. * @param int $status Status code for the response, if any.
  4. * @param array $headers Headers for the response, if any.
  5. * @param mixed $body Stream body.
  6. */
  7. public function __construct(
  8. $status = 200,
  9. array $headers = array(),
  10. $body = null,
  11. )
  12. {
  13. //...
  14. }

说明body 可以是字符串,也可以是 Stream。Stream 的 body 必须要实现 PSR-7-http-message 中的 StreamInterface

PHP HTTP 函数示例

下文代码示例演示了如何使用 HTTP 函数中的 $request$Response

  1. use RingCentral\Psr7\Response;
  2. function php_http_handler($request, $context): Response{
  3. $body = $request->getBody()->getContents();
  4. $queries = $request->getQueryParams();
  5. $method = $request->getMethod();
  6. $headers = $request->getHeaders();
  7. $path = $request->getAttribute("path");
  8. $requestURI = $request->getAttribute("requestURI");
  9. $clientIP = $request->getAttribute("clientIP");
  10. $params = array(
  11. 'method' => $method,
  12. 'clientIP' => $clientIP,
  13. 'requestURI' => $requestURI,
  14. 'path' => $path,
  15. 'queriesMap' => $queries,
  16. 'headersMap' => $headers,
  17. 'body' => $body,
  18. );
  19. $respHeaders = array('Content-Type' => 'application/json');
  20. $respBody = json_encode($params);
  21. return new Response(200, $respHeaders, $respBody);
  22. }

HTTP 函数限制项

请求限制项

如果 HTTP 函数请求超过以下限制,会抛出 400 状态码和 InvalidArgument 错误码。

参数 限制 HTTP 状态码 错误码
headers 请求头中的所有键和值的大小不能超过 4 KB。 400 InvalidArgument
path 请求路径以及所有查询参数的大小不能超过 4 KB。
body HTTP body 的大小不能超过 6 MB。

响应限制项

如果超过以下限制,会抛出 502 状态码和 BadResponse 错误码。

参数 限制 HTTP 状态码 错误码
headers 响应头中的所有键和值对的大小不能超过 4 KB。 502 BadResponse
body HTTP body 的大小不能超过 6 MB。

更多信息

PHP 运行环境的详细信息,请参见 PHP 运行环境