钥匙要点
-
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
我们还需要删除对Guzzle5的依赖性。最终的需求块看起来像这样: "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"
>在EntityFactory类实施的EntityFactory界面中,需要完成相同的操作。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);
> difbot SDK现在不仅兼容PSR-7,而且还可以接受HTTP客户端的其他实现。它所需要的只是一个尊重Httplug接口的适配器,所有内容都应该从开箱即用。
>
经常询问有关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中文网其他相关文章!

长URL(通常用关键字和跟踪参数都混乱)可以阻止访问者。 URL缩短脚本提供了解决方案,创建了简洁的链接,非常适合社交媒体和其他平台。 这些脚本对于单个网站很有价值

在Facebook在2012年通过Facebook备受瞩目的收购之后,Instagram采用了两套API供第三方使用。这些是Instagram Graph API和Instagram Basic Display API。作为开发人员建立一个需要信息的应用程序

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

这是有关用Laravel后端构建React应用程序的系列的第二个也是最后一部分。在该系列的第一部分中,我们使用Laravel为基本的产品上市应用程序创建了一个RESTFUL API。在本教程中,我们将成为开发人员

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

2025年的PHP景观调查调查了当前的PHP发展趋势。 它探讨了框架用法,部署方法和挑战,旨在为开发人员和企业提供见解。 该调查预计现代PHP Versio的增长


热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

Dreamweaver CS6
视觉化网页开发工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境