个性化阅读
专注于IT技术分析

7个最好的PHP Http客户端库

本文概述

许多Web应用程序都依赖于第三方应用程序通过REST API提供的服务。这些应用程序提供了某些终结点, 你可以在这些终结点上根据数据, 请求的方法等来检索, 更新或删除信息。但是, 如果没有像样的Http客户端来为你执行请求, 就无法在服务器中实现。有许多库可以实现这一目标, 那么什么是最适合你的库?根据你的要求, 你需要根据库提供的功能自行进行设计。在本文中, 我们将与你分享PHP最好的7个Http客户端库, 这些库将帮助你轻松地通过API与世界各地的应用程序进行通信。

7. Yii2 Httpclient

Yii2 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. Buzz

Buzz是用于发布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

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. Httplug

PHP-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. Httpful

Httpful是一个简单的, 可链接的, 可读的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 PHP

Unirest是一组由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. Guzzle

Guzzle是一个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客户端库, 请在注释框中与社区共享。

赞(0)
未经允许不得转载:srcmini » 7个最好的PHP Http客户端库

评论 抢沙发

评论前必须登录!