7个最好的PHP Http客户端库

本文概述

  • 7. Yii2 Httpclient
  • 6. Buzz
  • 5. Requests
  • 4. Httplug
  • 3. Httpful
  • 2. Unirest PHP
  • 1. Guzzle
许多Web应用程序都依赖于第三方应用程序通过REST API提供的服务。这些应用程序提供了某些终结点, 你可以在这些终结点上根据数据, 请求的方法等来检索, 更新或删除信息。但是, 如果没有像样的Http客户端来为你执行请求, 就无法在服务器中实现。有许多库可以实现这一目标, 那么什么是最适合你的库?根据你的要求, 你需要根据库提供的功能自行进行设计。在本文中, 我们将与你分享PHP最好的7个Http客户端库, 这些库将帮助你轻松地通过API与世界各地的应用程序进行通信。
7. Yii2 HttpclientYii2 Httpclient是Yii Framework的扩展, 它允许你使用几行代码来实现有用的Http客户端。为了发送HTTP请求, 你需要实例化[[\ yii \ httpclient \ Client]]并使用其createRequest()方法创建新的HTTP请求。然后, 你应该根据自己的目标配置所有请求参数并发送请求。结果, 你将获得一个[[\ yii \ httpclient \ Response]]实例, 该实例包含所有响应信息和数据。例如:
use yii\httpclient\Client; $client = new Client(); $response = $client-> createRequest() -> setMethod('POST') -> setUrl('http://example.com/api/1.0/users') -> setData(['name' => 'John Doe', 'email' => 'johndoe@example.com']) -> send(); if ($response-> isOk) { $newUserId = $response-> data['id']; }

6. BuzzBuzz是用于发布HTTP请求的轻量级PHP 5.3库。 Buzz由Kris Wallsmith于2010年创建。多年来, 该项目非常受欢迎, 下载量超过700万。自2017年8月以来, Tobias Nyholm一直在维护该库。 Buzz的想法仍然是相同的, 我们应该有一个简单的API并模仿浏览器的行为以便于测试。我们不应该重新发明轮子, 我们不应该像其他客户(如Guzzle)一样强大和灵活。但是, 我们确实非常重视性能。
我们确实喜欢PSR, 这是我们希望支持的PSR的愿望清单:
  • PSR-1(代码样式)
  • PSR-2(代码样式)
  • PSR-4(自动加载)
  • PSR-7(HTTP消息)
  • PSR-15(HTTP中间件)
  • PSR-17(HTTP工厂)
  • PSR-18(HTTP客户端)
Buzz语法非常友好且易于编写:
< ?php$browser = new Buzz\Browser(); $response = $browser-> get('http://www.google.com'); echo $browser-> getLastRequest()."\n"; // $response is an object. // You can use $response-> getContent() or $response-> getHeaders() to get only one part of the response. echo $response;

5. Requests【7个最好的PHP Http客户端库】Requests是一个用PHP编写的HTTP库, 专门编写为易于使用。它大致基于出色的Requests Python库中的API。请求是ISC许可的(类似于新的BSD许可), 并且没有依赖关系, 除了PHP 5.2+。尽管PHP用作网络语言, 但仍然严重缺乏发送HTTP请求的工具。至少可以说, cURL有一个有趣的API, 你不一定总是依赖它。套接字仅提供低级别的访问, 并且需要你构建自己分析的大多数HTTP响应。它的语法非常友好并且易于使用:
$headers = array('Accept' => 'application/json'); $options = array('auth' => array('user', 'pass')); $request = Requests::get('https://api.github.com/gists', $headers, $options); var_dump($request-> status_code); // int(200)var_dump($request-> headers['content-type']); // string(31) "application/json; charset=utf-8"var_dump($request-> body); // string(26891) "[...]"

通过请求, 你可以发送HEAD, GET, POST, PUT, DELETE和PATCH HTTP请求。你可以使用简单的数组添加标题, 表单数据, 多部分文件和参数, 并以相同的方式访问响应数据。请求使用cURL和fsockopen, 具体取决于系统所提供的功能, 但不使用任何方式抽象所有令人讨厌的内容, 并提供一致的API。
4. HttplugPHP-HTTP是标准化PHP包的HTTP交互的下一步。它建立在PSR-7之上, 该PSR-7定义了HTTP请求和响应的接口。但是, PSR-7没有描述你创建请求或发送请求的方式。 PHP-HTTP旨在通过提供HTTP客户端接口HTTPlug来填补这一空白。
PHP-HTTP具有三个目标:
  1. 鼓励软件包开发人员依赖简单的HTTPlug接口, 而不是具体的HTTP客户端。
  2. 向PHP社区提供高质量的HTTP相关软件包。
  3. 随着时间的流逝, 使HTTPlug成为PHP标准建议书(PSR), 以便客户端将直接实现HTTPlug接口, 并且不再需要我们的适配器。
HTTPlug来自用PHP编写的HTTP客户端的摘要, 提供了一个简单的接口。它还提供了一个与实现无关的插件系统来构建管道, 而与所使用的HTTP客户端实现无关。
3. HttpfulHttpful是一个简单的, 可链接的, 可读的PHP库, 旨在使讲HTTP更加明智。它使开发人员可以专注于与API交互, 而不是在curl set_opt页面中进行筛选, 并且是理想的PHP REST客户端。 Httpful功能:
  • 可读的HTTP方法支持(GET, PUT, POST, DELETE, HEAD和OPTIONS)
  • 自定义标题
  • 自动” 智能” 解析
  • 自动有效负载序列化
  • 基本认证
  • 客户端证书授权
  • 请求” 模板”
// 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";

2. Unirest PHPUnirest是一组由Mashape构建和维护的, 以多种语言提供的轻量级HTTP库, 该库还维护着开源API Gateway Kong。该库具有:
  • 调用GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE, PATCH请求的实用方法
  • 支持表单参数, 文件上传和自定义主体实体
  • 支持gzip
  • 本地支持基本, 摘要, 协商, NTLM身份验证
  • 可自定义的超时
  • 每个请求的可自定义默认标头(DRY)
  • 自动将JSON解析为本地对象以进行JSON响应
$headers = array('Accept' => 'application/json'); $query = array('foo' => 'hello', 'bar' => 'world'); $response = Unirest\Request::post('http://mockbin.com/request', $headers, $query); $response-> code; // HTTP Status code $response-> headers; // Headers $response-> body; // Parsed body $response-> raw_body; // Unparsed body

1. GuzzleGuzzle是一个PHP HTTP客户端, 可以轻松发送HTTP请求, 并且可以轻松地与Web服务集成。 Guzzle功能:
  • 简单的界面, 可用于构建查询字符串, POST请求, 流式传输大型上传文件, 流式传输大型下载文件, 使用HTTP cookie, 上传JSON数据等。
  • 可以使用同一接口发送同步和异步请求。
  • 将PSR-7接口用于请求, 响应和流。这使你可以在Guzzle中使用其他PSR-7兼容的库。
  • 提取底层的HTTP传输, 使你可以编写环境并传输不可知的代码;也就是说, 对cURL, PHP流, 套接字或非阻塞事件循环没有硬性依赖。
  • 中间件系统使你可以增强和构成客户端行为。
$client = new GuzzleHttp\Client(); $res = $client-> request('GET', 'https://api.github.com/user', [ 'auth' => ['user', 'pass'] ]); echo $res-> getStatusCode(); // "200" echo $res-> getHeader('content-type'); // 'application/json; charset=utf8' echo $res-> getBody(); // {"type":"User"...'

如果你知道另一个很棒的PHP Http客户端库, 请在注释框中与社区共享。

    推荐阅读