nategood/httpful

一个可读性高、可链式调用、REST友好的PHP HTTP客户端

安装次数: 14,260,028

依赖者: 339

建议者: 4

安全: 1

星标: 1,739

关注者: 82

分支: 298

开放问题: 87

1.0.0 2024-05-01 11:33 UTC

README

Httpful是一个适用于PHP 8.0+的简单Http客户端库。它强调可读性、简单性和灵活性——基本上提供完成任务所需的功能和灵活性,并使这些功能易于使用。

特性

  • 支持可读的HTTP方法(GET、PUT、POST、DELETE、HEAD、PATCH和OPTIONS)
  • 自定义头部
  • 自动“智能”解析
  • 自动负载序列化
  • 基本认证
  • 客户端证书认证
  • 请求“模板”

预览

这里有一些可以刺激你胃口的东西。搜索包含"#PHP"的twitter API推文。随意添加一个简单头部。注意,库会自动将响应解析为JSON(如果需要可以覆盖此操作)并将其解析为对象数组。

// Make a request to the GitHub API with a custom
// header of "X-Trvial-Header: Just as a demo".
$url = "https://api.github.com/users/nategood";
$response = \Httpful\Request::get($url)
    ->expectsJson()
    ->withXTrivialHeader('Just as a demo')
    ->send();

echo "{$response->body->name} joined GitHub on " .
                        date('M jS', strtotime($response->body->created_at)) ."\n";

安装

Composer

Httpful遵守PSR-0规范,可以使用composer安装。只需将nategood/httpful添加到你的composer.json文件中。Composer是PEAR的合理替代品。它非常适合管理大型项目中的依赖项

{
    "require": {
        "nategood/httpful": "*"
    }
}

从源安装

因为Httpful遵守PSR-0规范,你也可以克隆Httpful仓库并使用兼容PSR-0的自动加载器来加载库,例如Symfony的。或者你也可以使用Httpful中包含的兼容PSR-0的自动加载器(只需require("bootstrap.php"))。

构建Phar

如果你想要构建自己的Phar存档,可以使用包含的build脚本。确保你的php.iniphar.readonly设置的值为Off或0。此外,你需要在项目根目录中创建一个空的downloads目录。

贡献

Httpful强烈鼓励提交pull请求。在提交pull请求时,请

  • 所有pull请求都应该针对dev分支(而不是master
  • 确保你的代码遵循编码规范
  • 请使用软制表符(四个空格)而不是硬制表符
  • 确保为你的更改添加适当的测试覆盖率
  • 通过phpunit ./tests在测试目录中运行所有单元测试
  • 在适当的位置包含注释,并添加描述性的pull请求信息

变更日志

1.0.0

  • 安全 将证书验证设置为默认。这是一个可能破坏性的更改,因此按照semver的规则,增加主版本号。验证仍然可以跳过,但必须通过withoutStrictSSL显式跳过。
  • 重构 PR #305 移除PHP 8.1之前的弃用功能
  • 重构 部分来自 PR #282 为现在Travis已不存在添加CI支持

0.3.2

  • 重构 PR #276 为 JSON 解析错误添加了正确子类化的、更具描述性的异常

0.3.1

  • 修复 PR #286 修复了头部的大小写敏感性

0.3.0

  • 重构 放弃了对过时 PHP 版本的支持。更新了 PHPUnit 测试。

0.2.20

  • 小改进 将响应构建逻辑移动到单独的函数中 PR #193

0.2.19

  • 新功能 发送前钩子 PR #164
  • 小改进 更具描述性的连接异常 PR #166

0.2.18

0.2.17

  • 新功能 PR #144 向 Response 类添加了额外的参数,以指定关于请求/响应的额外元数据(例如重定向次数)。

0.2.16

  • 新功能 添加了对 whenError 的支持,以便定义在错误发生时触发的自定义回调。对于记录或覆盖默认错误日志行为非常有用。

0.2.15

  • 新功能 I #131 支持 SOCKS 代理

0.2.14

  • 新功能 I #138 添加了 XML 请求构建的替代选项。在下一个主要版本中,这可能会取代旧版本。

0.2.13

  • 重构 I #121 在 cURL 错误上抛出更具描述性的异常
  • 重构 I #122 在 Request 中进行更好的代理清理
  • 重构 I #119 更好地记录 Request::body 上的 mimeType 参数
  • 其他代码和测试清理

0.2.12

  • 重构 I #123 支持新的 cURL 文件上传方法
  • 新功能 I #118 5.4 HTTP 测试服务器
  • 修复 I #109 修正了拼写错误
  • 修复 I #103 处理了严格 Ssl 模式下的 CURLOPT_SSL_VERIFYHOST

0.2.11

  • 修复 I #99 防止在 HEAD 请求上挂起

0.2.10

  • 修复 I #93 修复了内容长度设置不正确的情况

0.2.9

  • 新功能 I #89 支持 multipart/form-data(即文件上传)!感谢 @dtelaroli!

0.2.8

  • 修复 Pull Request 86 的通知修复

0.2.7

  • 修复 I #86 在使用代理时移除 Connection Established 头部

0.2.6

  • 修复 I #85 解决了空内容长度问题

0.2.5

  • 新功能 I #80 I #81 使用 useProxy 方法添加了代理支持。

0.2.4

  • 新功能 I #77 设置超时(秒)的便捷方法 $req->timeoutIn(10);
  • 修复 I #75 I #78 检查是否使用摘要认证的漏洞。

0.2.3

  • 修复 覆盖默认的 MIME 处理器
  • 修复 PR #73 解析 HTTP 状态码

0.2.2

  • 特性 添加支持将 JSON 响应解析为关联数组而不是对象
  • 特性 更好地支持在 MIME 处理器上设置构造函数参数

0.2.1

  • 特性 PR #72 允许支持自定义 Accept 标头

0.2.0

  • 重构 PR #49 将头部分离到自己的类中
  • 重构 PR #54 添加了更具体的异常
  • 修复 PR #58 修复了在空 XML 响应上抛出错误的问题
  • 特性 PR #57 添加了对摘要认证的支持

0.1.6

  • 可以通过重载 followRedirects(int max_redirects) 来设置最大重定向次数
  • 符合标准的 Accepts 标头修复
  • 修复了通过 Composer 安装时的引导过程漏洞

0.1.5

  • 使用 DIRECTORY_SEPARATOR 常量 PR #33
  • PR #35
  • 添加了响应的 raw_headers 属性引用。
  • 组合请求头,并将 raw_header 添加到请求对象中。
  • 修复了响应中的错误,并添加了更多注释以提高清晰度。
  • 修复了头部分析,允许最小(仅状态行)的解析,并按照 RFC2616 处理实际以 CRLF 结尾的头。
  • 添加了所有可接受场景的完美测试 Accept: 标头,详情见 @b78e9e82cd9614fbe137c01bde9439c4e16ca323。
  • 添加了默认 User-Agent 标头
  • User-Agent: Httpful/0.1.5 + cURL 版本 + 服务器软件 + PHP 版本
  • 要绕过此“默认”操作,只需在请求头中添加一个 User-Agent 即可,即使是一个空 User-Agent 也足够,并且足以产生所需的结果。
  • 完成了新增功能的单元测试。
  • 添加了 phpunit 覆盖率报告,并帮助 phpunit 简化测试的自动定位。

0.1.4

  • 添加了对 CSV 处理的支持 PR #32

0.1.3

  • 在 JsonParser 和 XmlParser 中处理空响应

0.1.2

  • 添加了对设置 XMLHandler 配置选项的支持
  • 添加了覆盖 XmlHandler 和注册自定义解析器的示例
  • 删除了 httpful.php 下载(已过时,改为使用 httpful.phar)

0.1.1

  • 修复了序列化默认情况以及 phpunit 测试

0.1.0

  • 添加了对注册 MIME 处理器的支持
  • 创建了所有 MIME 处理器都必须扩展的 AbstractMimeHandler 类型
  • 将解析/序列化逻辑从 Request/Response 类中提取出来,放入自己的 MIMEHandler 类中
  • 添加了注册新 MIME 处理器以处理 MIME 类型的能力