guzlezz 6已经淘汰,并支持PSR 7。虽然Guzzle索赔的作者在可预见的将来将支持Guzzle 5的支持,但持怀疑态度的寿命更加安全。此外,虽然PSR 7可能有其怪癖,但如果仅与其他项目兼容,则遵循PSR是很好的。 有人在其应用中实现我们的客户端的人可能已经使用了首选的HTTP客户端,并且希望使用他们的而不是guzzle。我们应该允许在我们的SDK中轻松注入任何
http客户端。巧合的是,有一个新项目允许我们这样做:httplug。
这意味着使用Guzzle 6 CAN CAN CAN的人需要PHP-HTTP/Guzzle6-Adapter才能吸入适配器,HTTPLUG接口软件包,而Guzzle 6本身作为适配器的依赖。
httplug是可重复使用软件包的入口点。所有客户端(例如Guzles6适配器)均基于客户抽象。然后,这些客户进一步利用其基本软件包 /依赖项 - 在这种情况下,Guzzle 6。>所以,下到顶:
http客户端存在(guzzle 6)
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?
以上是用php-http和httplug脱离guzzle5的详细内容。更多信息请关注PHP中文网其他相关文章!