用php-http和httplug脱离guzzle5
钥匙要点
-
PHP-HTTP的项目
- httplug,允许将任何HTTP客户端轻松注入SDK,为已经使用的HTTP客户端提供的应用程序提供解决方案,并希望避免使用Guzzle。 > httplug接口软件包和guzzle 6可以使用作曲家需要php-http/guzzle6-apapter命令。这允许使用Guzzle 6或任何其他实现HTTPLUG的HTTPCLIENT接口的适配器。
- > difbot SDK已成为PSR-7兼容,并接受了其他HTTP客户端的实现。它只需要一个适配器,尊重HTTPLUG接口才能开箱即用。 httplug提供了一种在应用程序中抽象HTTP客户端实现的新方法,为一层抽象的成本提供了可扩展的性能。
- >
- 本文由MárkSági-Kazár和David Buchmann进行了同行评审。感谢SitePoint所有的同行评审器制作SitePoint内容的最佳功能!
- 在上一个系列中,我们为Diffbot构建了PHP客户端。客户端运行良好,并且在相对广泛的使用中 - 我们甚至在实时应用程序上测试了它以确保其取决于标准杆 - 但这在很大程度上取决于Guzzle5。 有两个问题:
guzlezz 6已经淘汰,并支持PSR 7。虽然Guzzle索赔的作者在可预见的将来将支持Guzzle 5的支持,但持怀疑态度的寿命更加安全。此外,虽然PSR 7可能有其怪癖,但如果仅与其他项目兼容,则遵循PSR是很好的。 有人在其应用中实现我们的客户端的人可能已经使用了首选的HTTP客户端,并且希望使用他们的而不是guzzle。我们应该允许在我们的SDK中轻松注入任何
http客户端。巧合的是,有一个新项目允许我们这样做:httplug。
- > 注意:您不必熟悉DiffBot SDK的内部逻辑即可进行。本文中的过程适用于具有混凝土HTTP客户端实现的任何软件包,并且易于遵循。
- > php-http和httplug PHP-HTTP是PHP中HTTP相关工具的GITHUB组织。它提供HTTPLUG,一个接口的集合和例外,以在PSR-7请求和响应之上定义最小的HTTP客户端合同。本合同的实现提供 虚拟软件包php-http/client-implement。
这意味着使用Guzzle 6 CAN CAN CAN的人需要PHP-HTTP/Guzzle6-Adapter才能吸入适配器,HTTPLUG接口软件包,而Guzzle 6本身作为适配器的依赖。
httplug是可重复使用软件包的入口点。所有客户端(例如Guzles6适配器)均基于客户抽象。然后,这些客户进一步利用其基本软件包 /依赖项 - 在这种情况下,Guzzle 6。>所以,下到顶:
http客户端存在(guzzle 6)
- >
- guzzle 6适配器是用httplug作为其接口构建的 一个需要能够使HTTP调用需要客户端的应用程序,需要HTTPLUG的HTTPCLIENT接口,而不是Guzzle 6直接 然后,该应用程序可以使用Guzzle 6,或实现HTTPLUG的HTTPCLIENT接口并包装另一个第三方HTTP客户端
- >该团队的计划最终是在PHP Land:Guzzle 6,Guzzle 5,Zend2,Zend1等中所有各种HTTP客户端的最大支持客户端版本,并且只需将适当的适配器插入混合物。 >
- 请注意,我们使用术语 适配器
client
>在这里几乎可以互换 - 基于HTTPLUG的适配器都是。他们是围绕现有客户的包装器,但直接用作客户自己。我们在这篇文章中的计划是用httplug版本替换difbot php客户端的混凝土guzzle 5的依赖。 >注意:httplug和相关软件包是alpha软件,因此可能会更改。将任何东西转换为使用它们都是有冒险的努力。
>
>引导
>像往常一样,建议我们使用改进的宅基地来引导我们的环境。准备好后,我们可以克隆并测试SDK的当前稳定版本:
所有测试都应通过(除了因某些胡说八道而被漏洞且无法混合的测试),因此我们准备开始转换。
>入门
git clone https://github.com/swader/diffbot-php-client cd diffbot-php-client git checkout tags/0.4.5 composer install phpunit
然后,我们将两个依赖项添加到我们的composer.json文件中: 这是告诉客户从现在开始的,这取决于a虚拟软件包 - 这个。这意味着要使用,使用我们的Diffbot客户端的应用程序(如此)必须选择此软件包的实现(在Packagist上列出的链接中列出的一个)。当然,在包装的开发过程中,不可能测试并查看所有事物是否在没有实际实施的情况下工作,因此我们指定了额外的要求依赖性。在上面的具体情况下,我们使用“ php-http/guzzle6-apapter”:“ 〜0.2@dev”。我们之所以选择该特定版本只是因为它是最新的版本,而且没有稳定的版本。
注意:您可能想知道为什么我们使用将值添加到composer.json中的方法,而不是像平时一样在终端中互动地声明依赖项。这是因为在虚拟软件包上做作曲家需要的需要会丢失错误 - 该软件包实际上并不存在,只是它的虚拟名称,占位符,因此作曲家会感到困惑不知道该安装什么。有一个问题暗示对此有所改变,但不太可能很快发生。
>由于PHP-HTTP软件包仍处于繁重的开发中,因此我们应该在Composer.json文件中添加以下两个值:
>这是允许安装开发软件包(不稳定),但如果存在,则更喜欢稳定的版本。因此,它不会拿出高度不稳定的phpunit 5.2.x,而是将获取5.0.8(在撰写本文时最新),但如果我们要求它提供没有的包裹,它也将成功稳定的版本(例如Guzzle6-apapter)。
计划 > >此外,该项目还具有发现组件,该组件具有一些用于发现已安装工厂和客户的静态类 - 这使我们能够在某些情况下为最终用户提供零型配置经验(请参阅文档)。
>先决条件 让我们需要其他软件包:
此更改现在使Diffbot SDK的最终用户可以:
>安装了自己的客户端,让发现组件与httpmethodsclient同时自动照顾事物,或
大多数用户将在Autopilot上使用它。 由于EntityFactory发出的投诉,我们实际上不需要编辑API摘要 - 它将自行处理事情。爬网类的呼叫对手有些不同: >这里的两个警告 - 使用$响应的JSON方法的第二行,以及期望Guzzle5响应的实体实例化。从这里开始我们唯一可以影响的线就是前者,所以让我们将其更改为: 更改为: 实体类别具有以下导入:
>
>由于本教程已经有点长,如果您有兴趣学习Guzzle 5和Guzzle 6之间的模拟差异,请参阅相关的功能分支,具体来说是Diffbot SDK的两个版本之间。 最后,让我们进行测试: 成功!所有通过(预期跳过测试除外)。 结论 >
guzzle5和php http/httplug之间有什么区别。 Guzzle5是特定的HTTP客户端,而PHP HTTP是一个抽象层,可让您使用任何HTTP客户端。 HTTPLUG是PHP HTTP的扩展,可提供其他功能。主要区别在于,PHP HTTP和HTTPLUG允许更具灵活性和互操作性,因为它们不与特定的HTTP客户端绑定。 >如何使用php http/httplug发送请求?git clone https://github.com/swader/diffbot-php-client
cd diffbot-php-client
git checkout tags/0.4.5
composer install
phpunit
git checkout -b feature-httplug
"require": {
...
"php-http/client-implementation": "^1.0"
},
"require-dev": {
...
"php-http/guzzle6-adapter": "~0.2@dev"
},
呼叫的结果被保存为$响应,这是一个guzzle5响应。然后,该响应由实体工厂进行处理,该工厂检查其有效性并从中构建实体,将其推入实体迭代器。
因此,该计划是:
>
> difbot类git clone https://github.com/swader/diffbot-php-client
cd diffbot-php-client
git checkout tags/0.4.5
composer install
phpunit
我们可以将其更改为:
>
git checkout -b feature-httplug
"require": {
...
"php-http/client-implementation": "^1.0"
},
"require-dev": {
...
"php-http/guzzle6-adapter": "~0.2@dev"
},
"prefer-stable": true,
"minimum-stability": "dev"
api摘要,爬网和搜索
因为我们之前实现的httpmethodsclient实例具有GET方法,因此在这方面不需要更改。但是,$响应实例显示了一个误匹配,并且有充分的理由。 EntityFactory预期的原始$响应是Guzzle5响应。git clone https://github.com/swader/diffbot-php-client
cd diffbot-php-client
git checkout tags/0.4.5
composer install
phpunit
git checkout -b feature-httplug
"require": {
...
"php-http/client-implementation": "^1.0"
},
"require-dev": {
...
"php-http/guzzle6-adapter": "~0.2@dev"
},
"prefer-stable": true,
"minimum-stability": "dev"
实体工厂
"require": {
"php" : ">=5.4.0",
"php-http/client-implementation": "^1.0"
},
"require-dev": {
"symfony/var-dumper": "~2",
"phpunit/phpunit": "^5.0",
"php-http/guzzle6-adapter": "~0.2@dev"
},
composer require "php-http/utils" "php-http/discovery"
use GuzzleHttp\Client;
use Http\Client\Utils\HttpMethodsClient as Client;
我们更改:<span>/**
</span><span> * Sets the client to be used for querying the API endpoints
</span><span> *
</span><span> * <span>@param Client $client
</span></span><span> * <span>@see http://php-http.readthedocs.org/en/latest/utils/#httpmethodsclient
</span></span><span> * <span>@return $this
</span></span><span> */
</span><span>public function setHttpClient(Client $client = null)
</span><span>{
</span> <span>if ($client === null) {
</span> <span>$client = new Client(
</span> <span><span>\Http\Discovery\HttpClientDiscovery</span>::find(),
</span> <span><span>\Http\Discovery\MessageFactoryDiscovery</span>::find()
</span> <span>);
</span> <span>}
</span> <span>$this->client = $client;
</span> <span>return $this;
</span><span>}
</span>
<span>public function call()
</span><span>{
</span> <span>$response = $this->diffbot->getHttpClient()->get($this->buildUrl());
</span>
<span>$array = $response->json();
</span>
<span>if (isset($array['jobs'])) {
</span> <span>$jobs = [];
</span> <span>foreach ($array['jobs'] as $job) {
</span> <span>$jobs[] = new JobCrawl($job);
</span> <span>}
</span>
<span>return new EntityIterator($jobs, $response);
</span> <span>} elseif (!isset($array['jobs']) && isset($array['response'])) {
</span> <span>return $array['response'];
</span> <span>} else {
</span> <span>throw new DiffbotException('It appears something went wrong.');
</span> <span>}
</span><span>}
</span>
嘲笑,测试HTTP请求和API调用的主要方式在Guzzle 6中是不同的,因此我们的测试需要大修稍大。
$array = json_decode($response->getBody(), true);
>
经常询问有关php http和httplug
的问题(常见问题解答)
guzzle5和php http/httplug?
php http/httplug PHP的依赖关系管理工具。您可以通过运行命令作曲家需要PHP-HTTP/HTTPLUG来安装它。这将下载httplug库及其依赖项。
>
>如何使用php http/httplug?
> httplug中的插件是什么,我如何使用它们?
插件httplug中的插件用于向HTTP客户端添加功能。它们可用于添加身份验证,缓存和错误处理之类的功能。可以使用插件类的AddPlugin方法将插件添加到客户端中。>
>如何处理php http/httplug中的错误?以上是用php-http和httplug脱离guzzle5的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

会话劫持可以通过以下步骤实现:1.获取会话ID,2.使用会话ID,3.保持会话活跃。在PHP中防范会话劫持的方法包括:1.使用session_regenerate_id()函数重新生成会话ID,2.通过数据库存储会话数据,3.确保所有会话数据通过HTTPS传输。

SOLID原则在PHP开发中的应用包括:1.单一职责原则(SRP):每个类只负责一个功能。2.开闭原则(OCP):通过扩展而非修改实现变化。3.里氏替换原则(LSP):子类可替换基类而不影响程序正确性。4.接口隔离原则(ISP):使用细粒度接口避免依赖不使用的方法。5.依赖倒置原则(DIP):高低层次模块都依赖于抽象,通过依赖注入实现。

在PHPStorm中如何进行CLI模式的调试?在使用PHPStorm进行开发时,有时我们需要在命令行界面(CLI)模式下调试PHP�...

PHP8.1中的枚举功能通过定义命名常量增强了代码的清晰度和类型安全性。1)枚举可以是整数、字符串或对象,提高了代码可读性和类型安全性。2)枚举基于类,支持面向对象特性,如遍历和反射。3)枚举可用于比较和赋值,确保类型安全。4)枚举支持添加方法,实现复杂逻辑。5)严格类型检查和错误处理可避免常见错误。6)枚举减少魔法值,提升可维护性,但需注意性能优化。

如何在系统重启后自动设置unixsocket的权限每次系统重启后,我们都需要执行以下命令来修改unixsocket的权限:sudo...

静态绑定(static::)在PHP中实现晚期静态绑定(LSB),允许在静态上下文中引用调用类而非定义类。1)解析过程在运行时进行,2)在继承关系中向上查找调用类,3)可能带来性能开销。
