本文概述

许多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语法非常友好且易于编写:

$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具有三个目标:

鼓励软件包开发人员依赖简单的HTTPlug接口, 而不是具体的HTTP客户端。

向PHP社区提供高质量的HTTP相关软件包。

随着时间的流逝, 使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客户端库, 请在注释框中与社区共享。

php http库,7个最好的PHP Http客户端库相关推荐

  1. ROS2学习(七).ROS概念 - ROS客户端库(Ros Client Library)

    ROS客户端库 概述 支持的客户端库 通用功能:RCL 语言特有功能 同ROS 1的比较 小结 参考 概述 客户端库是开发者用以开发ROS代码时使用的API,使用客户端库,开发者将接触到ROS的相关概 ...

  2. ROS 2 index翻译(五)——关于ROS 2客户端库

    1.概述 客户端库(RCL,ROS Client Library)是允许用户执行其ROS代码的API.用户使用客户端库来访问ROS概念,如节点.主题.服务等.客户端库包含多种编程语言,因此用户可以使用 ...

  3. 使用人脸客户端库快速实现对面部的分析---C#

    目录 效果展示: 步骤一:安装人脸客户端库和窗口相关的库 步骤二:声明初始化相关变量 为资源的密钥和终结点创建变量 客户端构造器 图片相关变量 窗口工具栏 步骤三:MainWindiow窗口构造器 步 ...

  4. ISP 【一】————boost标准库使用——批量读取保存文件 /boost第三方库的使用及其cmake添加,图像gramma

    CMakeLists.txt文件中需要添加第三方库,并企鹅在CMakeLists.txt中添加 include_directories(${PROJECT_SOURCE_DIR}/../3party/ ...

  5. linux下载python的es库,Elasticsearch py客户端库安装及使用方法解析

    一.介绍 elasticsearch-py是一个官方提供的low-level的elasticsearch python客户端库.为什么说它是一个low-level的客户端库呢?因为它只是对elasti ...

  6. 功能强大的 C++ redis 客户端库增加至 acl 项目中

    虽然 redis 开发库已有不少,但 C/C++ 的客户端库好用的并不多,虽然官方也提供了 C 版的客户端库,但易用性较差,而且不支持连接池功能,相对于 C/C++ 的库,JAVA 版的 jedis ...

  7. bpexpdate – 更改映像目录库中备份的截止日期以及介质目录库中介质的截止日期nbu...

    1.根据bpdbjobs查找backupid bpdbjobs -jobid xxx -all_columns|grep backupid 2.查看数据保留时间 [root@backup]# bpim ...

  8. automake生成静态库文件_动手 | 奶奶级的动态库入门

    程序编译过程 库文件 静态链接和动态链接的区别? 从0开始 - 创建和使用静态链接库 创建静态库项目 向静态库中添加文件 编译静态库 创建引用静态库的C++控制台应用 在应用中使用静态库功能 从0开始 ...

  9. iOS架构-静态库.framework(引用第三方SDK、开源库、资源包)(9)

    前面介绍了 静态库.a依赖第三方静态库.a的制作 静态库.framework之依赖第三方库(Cocoapods进行管理) 今天课题: 静态库.framework(引用第三方SDK.framework. ...

最新文章

  1. 开启机器学习的第一课:用Pandas进行数据分析
  2. import lombok 报错_lombok
  3. 工业用微型计算机(24)-汇编语言分段结构
  4. 5.1.2 操作系统控制I/O设备的I/O控制器
  5. 递归算法——汉诺塔问题
  6. 【算法】剑指 Offer 24. 反转链表
  7. Bailian3704 扩号匹配问题【堆栈】
  8. 向虚拟机发短信(android SMS 调试)
  9. Google全球副总裁Vint Cerf:中国物联网发展不得不关注的几大问题
  10. autorunner测试java_AutoRunner自动化测试工具
  11. 《共同警戒区》观后感(r10笔记第97天)
  12. Linux shell脚本执行后出现语法错误: 未预期的文件结尾
  13. zigzag算法详解
  14. 论文代码复现之:AMR Parsing as Sequence-to-Graph Transduction
  15. 【Verifying transaction: failed】
  16. 放下一切包袱,轻装前行
  17. VC2017编译zxing
  18. uniapp做直播+可拖动弹幕
  19. JAVA大作业 - 五道三星题
  20. 华为手机 TalkBack

热门文章

  1. 为何你的情绪总被他人左右,ABC 情绪治疗法自救指南
  2. 【转载】Web .do文件详解
  3. 【安全资讯】历史上的五大数据泄露事件,你知道几个?
  4. 红眼睛红外成像微型成像仪快速刷新与动态显示温度测量
  5. java全景图片生成_[Java教程]使用Javascript来创建一个响应式的超酷360度全景图片查看幻灯效果...
  6. 如何在MacOS去调试iphone
  7. 学车拿驾照太费时?教你一个月过驾考!别再为报名浪费时间了!
  8. 微信开发者工具的快捷键
  9. 强化学习ppo算法详解
  10. Coogle学习 LightGBM 任务三