sirmonti/simplehttp

file_get_contents 函数的包装类,简化 HTTP 和 HTTPS 请求

8.2.0 2024-06-23 21:57 UTC

This package is auto-updated.

Last update: 2024-09-23 22:59:42 UTC


README

file_get_contents 函数的包装类,简化 HTTP 和 HTTPS 连接

描述

file_get_contents 函数的包装类。这个类并不旨在与功能齐全的网络框架(如 Guzzle 或 Swoole)竞争,而是为了提供一个简单便捷的解决方案,用于使用网络服务或访问网络资源

安装

通过 composer

composer require sirmonti/simplehttp

这个类没有外部依赖,这意味着您不需要进行完整安装,只需下载并将 simpleHTTP.php 文件放入您的项目文件夹即可。

功能

  • 轻量级
  • 非常简单的接口
  • 您可以禁用证书验证,允许使用自签名或过期的证书的站点
  • 在 HTTPS 连接中,检索远程的证书链
  • 支持证书认证。您可以提供您的证书以对远程站点进行认证
  • 可配置的异常级别。您可以选择禁用异常,仅在网络错误上引发异常,或者在 HTTP 错误上引发异常
  • 以 PSR7 格式提供响应。此功能需要安装外部包

基本用法

这只是一个简要说明,文件 simpleHTTP.md 提供了更全面的方法参考。

完整文档可在 此处 找到。

您创建一个 simpleHTTP 类的对象。构造函数有两个参数,异常级别和远程证书验证。

这里我们创建了一个异常级别为 2 且禁用证书验证的对象

  $http=new simpleHTTP(2,false);

证书验证是一个布尔标志,用于启用或禁用 HTTPS 连接上远程证书的验证。如果验证被启用,如果远程站点有一个伪造的证书(已过期、自签名或属于另一个域),则连接将被终止,并引发错误。如果禁用,错误将被忽略,连接将正常执行。

关于异常级别,有三个级别

  • 0:禁用异常。错误仅设置状态码响应。
  • 1:仅在网络错误上引发异常。HTTP 错误将报告为状态码。
  • 2:在任何错误上引发异常。

默认值为异常级别 1 和启用证书验证。

支持的方法有:GETPOSTPUTHEADDELETEOPTIONS。请求调用返回请求正文,其他数据(如响应头)存储在内部,可以检索。

这里,一个基本示例

  $http=new simpleHTTP;
  $resp=$http->get('https://www.example.com/');
  printf("Response data:\n%s\n",$resp);

这个库可以以 PSR7 格式返回响应,但需要安装第三方库。目前支持 HttpSoftNyholmGuzzleLaminas-diactorosSlim。simpleHTTP 会检测已安装的库,如果没有安装任何库,则会引发错误。

PSR7 响应很有用,因为主要的 PHP 框架都使用这种格式。

获取 PSR7 响应的示例

  $http=new simpleHTTP;
  $http->get('https://www.example.com/');
  $resp=$http->PSRResponse();

示例

更多示例在示例文件夹中。

这是最简单的用法

  $http=new simpleHTTP;
  $resp1=$http->get('https://www.example.com/data1.txt');
  $resp2=$http->get('https://www.example.com/data2.json');

如您所见,该对象直接通过URL提供请求。

这里,一个配置异常和证书接受示例

  // Exception level 2 (exception on network or HTTP errors)
  // Certificate validation disabled (Will accept any certificate)
  $http=new simpleHTTP(2,false);
  $data=[
    'field1'=>'Data to send in field1',
    'field2'=>'Data to send in field2'
  ];
  // Execute a POST request sending the content of the $data variable
  $resp=$http->post('https://www.example.com/sendpoint',$data);

这里,一个带有JSON编码体的POST请求

  // Default exception level is 1, which means exceptions will be fired
  // only on network errors
  $http=new simpleHTTP;
  $data=[
    'field1'=>'Data to send in field1',
    'field2'=>'Data to send in field2'
  ];
  $resp=$http->postJSON('https://www.example.com/jsonentrypoint',$data);

这里,一个以图像作为数据体的POST请求

  $http=new simpleHTTP;
  $data=file_get_contents('exampleimage.jpg');
  $http->postRAW('https://www.example.com/imagenentrypoint','image/jpeg',$data);

但是,如果您需要添加一个认证头呢?

  $http=new simpleHTTP;
  // Create the authentication header
  $headers=[
    'Authorization: Bearer AuthenticationToken'
  ];
  // Configure the default headers to send
  $http->setExtraHeaders($headers);
  $data=[
    'field1'=>'Data to send in field1',
    'field2'=>'Data to send in field2'
  ];
  $resp=$http->post('https://www.example.com/sendpoint',$data);

但是,如果我们只需要在特定请求中添加一个额外的头呢?

  $http=new simpleHTTP;
  $headers=[
    'Authorization: Bearer AuthenticationToken'
  ];
  $http->setExtraHeaders($headers);
  $data=[
    'field1'=>'Data to send in field1',
    'field2'=>'Data to send in field2'
  ];
  // Add an extra header to this request
  $resp=$http->post('https://www.example.com/sendpoint',$data,['X-Extra-Header: Data']);

此类请求使用 "simpleHTTP/7.0" 作为用户代理。您可以设置自己的用户代理

  $http=new simpleHTTP;
  // Add an User-Agent header
  $headers=[
    'Authorization: Bearer AuthenticationToken',
    'User-Agent: MyOwnUserAgent/1.0'
  ];
  $http->setExtraHeaders($headers);
  $data=[
    'field1'=>'Data to send in field1',
    'field2'=>'Data to send in field2'
  ];
  $resp=$http->post('https://www.example.com/sendpoint',$data);

这里,一个PUT请求示例

  $http=new simpleHTTP;
  $headers=[
    'Authorization: Bearer AuthenticationToken',
    'User-Agent: MyOwnUserAgent/1.0'
  ];
  $http->setExtraHeaders($headers);
  $data=[
    'field1'=>'Data to send in field1',
    'field2'=>'Data to send in field2'
  ];
  // Example PUT with body in JSON format
  $resp=$http->putJSON('https://www.example.com/sendpoint',$data);

但是,我怎样才能获取响应头和状态结果?

  $http=new simpleHTTP;
  $resp=$http->get('https://www.example.com/');
  printf("HTTP/%s %d %s\n",$http->protocolVersion(),$http->respCode(),$http->respStatus());
  printf("Response mime type: %s\n",$http->respMIME());

此代码将产生以下输出

HTTP/1.1 200 OK
Response mime type: text/html; charset=UTF-8

许可协议

此库根据MIT许可协议授权