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

8.2.0 2024-06-23 22:12 UTC

This package is auto-updated.

Last update: 2024-09-23 22:49:32 UTC


README

围绕file_get_contents函数的静态版本rapper,用于简化HTTP和HTTPS连接

描述

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

这个类是simpleHTTP的静态版本,这意味着不需要创建对象,可以直接调用方法。

安装

通过composer

composer require sirmonti/shttp

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

功能

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

基本用法

这只是一个简要的解释,文件SHTTP.md提供了更详尽的方法参考。

完整文档可以在这里找到Here.

有四个全局参数:异常级别、证书验证标志、额外HTTP标头和证书认证。

证书验证标志通过“verifCERT”布尔属性设置,异常级别通过setExceptionLevel()方法设置,额外HTTP标头通过setExtraHeaders()方法设置,证书认证通过setAuthCert()方法设置。

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

有三个异常级别

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

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

支持的方法是:GETPOSTPUTHEADDELETE

这里,使用此类的最基本示例

  SHTTP::get('https://www.example.com/');
  printf("Response data:\n%s\n",$resp);

这里,我们修改证书验证和异常级别

  // Disable certificate validation
  SHTTP::verifCERT=false;
  // Set exception level to 2
  SHTTP::setExceptionLevel(2);
  // All subsequent requests will operate with this parameters
  $resp=SHTTP::get('https://www.examples.com/');

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

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

获取PSR7响应的示例

  SHTTP::get('https://www.example.com/');
  $resp=SHTTP::PSRResponse();

示例

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

最简单的用法是直接调用请求

  $resp1=SHTTP::get('https://www.example.com/data1.txt');
  $resp2=SHTTP::get('https://www.example.com/data2.json');

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

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

  // Exception level 2 (exception on network or HTTP errors)
  SHTTP::setExceptionLeve(2);
  // Certificate validation disabled (Will accept any certificate)
  SHTTP::verifCERT=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=SHTTP::post('https://www.example.com/sendpoint',$data);

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

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

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

  $data=file_get_contents('exampleimage.jpg');
  SHTTP::postRAW('https://www.example.com/imagenentrypoint','image/jpeg',$data);

但是,如果你需要添加一个认证头怎么办?

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

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

  $headers=[
    'Authorization: Bearer AuthenticationToken'
  ];
  // This header will be used by all subsequent requests
  SHTTP::setExtraHeaders($headers);
  $data=[
    'field1'=>'Data to send in field1',
    'field2'=>'Data to send in field2'
  ];
  // Add an extra header to this request
  $resp=SHTTP::post('https://www.example.com/sendpoint',$data,['X-Extra-Header: Data']);

从这个类发出的请求使用“SHTTP/7.0”作为用户代理。您可以设置自己的用户代理。

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

这里,一个PUT请求示例

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

但是,我如何获取响应头和结果状态?

  $resp=SHTTP::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授权协议