用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的当前稳定版本:
所有测试都应通过(除了因某些胡说八道而被漏洞且无法混合的测试),因此我们准备开始转换。
>入门
1 2 3 4 5 |
|
然后,我们将两个依赖项添加到我们的composer.json文件中:
1 2 3 4 5 |
|
这是告诉客户从现在开始的,这取决于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)。
如果我们打算安装guzlezz6,1 |
|
计划
SDK当前工作的方式如下:在Main DiffBot类中,我们可以选择设置httpclient。当前,这是在版本5上的Guzles实现。如果未设置自定义客户端实例,则DiffBot类自动使用默认客户端。 然后,API摘要的呼叫方法将使用此客户端来向给定的URL发出GET请求。此外,在爬网API类和搜索API类中有一个自定义调用方法。1 2 3 4 5 6 7 8 |
|
呼叫的结果被保存为$响应,这是一个guzzle5响应。然后,该响应由实体工厂进行处理,该工厂检查其有效性并从中构建实体,将其推入实体迭代器。
因此,该计划是:>
- >用一种接受httplug实现的方法替换difbot :: sethttpclient
- >修改API摘要,爬网和搜索类调用方法,以便他们可以通过提供给他们的任何HTTP客户端实现来发出get请求。 >
- >修改实体工厂和实体迭代器,以便它们不再依赖于响应的guzzle5版本,而是PSR-7对应器。 PHP-HTTP项目具有附加软件包UTITS,其中包含HTTPMethodSclient。该类将消息工厂和HTTP客户端包装成一个整体,从而更轻松地使用常用动词(例如get,post等)发送请求,从而转化为与我们到目前为止所拥有的类似的内容:$ client-> get(。 ..)。更重要的是,它还返回PSR-7响应界面,这意味着我们可以使用getbody方法 - 仅将tojson方法毫无用处,我们可以轻松地做到这一点。
>此外,该项目还具有发现组件,该组件具有一些用于发现已安装工厂和客户的静态类 - 这使我们能够在某些情况下为最终用户提供零型配置经验(请参阅文档)。
>制定战斗计划,我们可以开始重构。>先决条件
让我们需要其他软件包:
> difbot类
difbot类在顶部具有以下线:
1 2 3 4 5 |
|
我们可以将其更改为:
>> sethttpclient方法现在应该在IDE中爆发,称其缺少某些必需的参数,即客户使用的客户以及用于构建请求实例的消息工厂。
1 |
|
1 2 3 4 5 6 7 8 |
|
此更改现在使Diffbot SDK的最终用户可以:
>安装了自己的客户端,让发现组件与httpmethodsclient同时自动照顾事物,或
>通过将PSR 7客户端的自定义实例注入其新实例中,并将1 2 |
|
大多数用户将在Autopilot上使用它。
- api摘要,爬网和搜索
- 接下来,呼叫方法。
由于EntityFactory发出的投诉,我们实际上不需要编辑API摘要 - 它将自行处理事情。爬网类的呼叫对手有些不同:
1 2 3 4 5 |
|
>这里的两个警告 - 使用$响应的JSON方法的第二行,以及期望Guzzle5响应的实体实例化。从这里开始我们唯一可以影响的线就是前者,所以让我们将其更改为:
1 |
|
1 2 3 4 5 6 7 8 |
|
更改为:
1 2 |
|
实体工厂
实体类别具有以下导入:
1 2 3 4 5 6 7 8 9 |
|
1 |
|
另一个变化与我们在爬网类中所做的相似。我们更改:
1 |
|
在checkResponseFormat和createApprepreTerator方法中
1 |
|
>
>实体迭代我们更改:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
嘲笑,测试HTTP请求和API调用的主要方式在Guzzle 6中是不同的,因此我们的测试需要大修稍大。
>由于本教程已经有点长,如果您有兴趣学习Guzzle 5和Guzzle 6之间的模拟差异,请参阅相关的功能分支,具体来说是Diffbot SDK的两个版本之间。
最后,让我们进行测试:
成功!所有通过(预期跳过测试除外)。
1 |
|
结论
HTTPLUG是一种有用的新方法,用于在我们构建的应用程序中抽象HTTP客户端实现。无论我们是自己构建HTTP客户端还是在其他应用中使用它们,PHP-HTTP都为一个额外的抽象层的合理价格提供了一个全新的新世界。>
如果您想通过添加更多适配器实现来提供帮助,或者仅通过尝试包装并提供反馈,则团队欢迎所有贡献。取得联系,或将反馈留在下面的评论部分中,如果您觉得本教程有趣,请不要忘记点击该按钮!>
经常询问有关php http和httplug
的问题(常见问题解答)guzzle5和php http/httplug?
guzzle5和php http/httplug之间有什么区别。 Guzzle5是特定的HTTP客户端,而PHP HTTP是一个抽象层,可让您使用任何HTTP客户端。 HTTPLUG是PHP HTTP的扩展,可提供其他功能。主要区别在于,PHP HTTP和HTTPLUG允许更具灵活性和互操作性,因为它们不与特定的HTTP客户端绑定。
php http/httplug PHP的依赖关系管理工具。您可以通过运行命令作曲家需要PHP-HTTP/HTTPLUG来安装它。这将下载httplug库及其依赖项。
>如何使用php http/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)

PHP中有四种主要错误类型:1.Notice:最轻微,不会中断程序,如访问未定义变量;2.Warning:比Notice严重,不会终止程序,如包含不存在文件;3.FatalError:最严重,会终止程序,如调用不存在函数;4.ParseError:语法错误,会阻止程序执行,如忘记添加结束标签。

PHP和Python各有优势,选择依据项目需求。1.PHP适合web开发,尤其快速开发和维护网站。2.Python适用于数据科学、机器学习和人工智能,语法简洁,适合初学者。

在PHP中,应使用password_hash和password_verify函数实现安全的密码哈希处理,不应使用MD5或SHA1。1)password_hash生成包含盐值的哈希,增强安全性。2)password_verify验证密码,通过比较哈希值确保安全。3)MD5和SHA1易受攻击且缺乏盐值,不适合现代密码安全。

PHP在电子商务、内容管理系统和API开发中广泛应用。1)电子商务:用于购物车功能和支付处理。2)内容管理系统:用于动态内容生成和用户管理。3)API开发:用于RESTfulAPI开发和API安全性。通过性能优化和最佳实践,PHP应用的效率和可维护性得以提升。

HTTP请求方法包括GET、POST、PUT和DELETE,分别用于获取、提交、更新和删除资源。1.GET方法用于获取资源,适用于读取操作。2.POST方法用于提交数据,常用于创建新资源。3.PUT方法用于更新资源,适用于完整更新。4.DELETE方法用于删除资源,适用于删除操作。

PHP是一种广泛应用于服务器端的脚本语言,特别适合web开发。1.PHP可以嵌入HTML,处理HTTP请求和响应,支持多种数据库。2.PHP用于生成动态网页内容,处理表单数据,访问数据库等,具有强大的社区支持和开源资源。3.PHP是解释型语言,执行过程包括词法分析、语法分析、编译和执行。4.PHP可以与MySQL结合用于用户注册系统等高级应用。5.调试PHP时,可使用error_reporting()和var_dump()等函数。6.优化PHP代码可通过缓存机制、优化数据库查询和使用内置函数。7

在PHPOOP中,self::引用当前类,parent::引用父类,static::用于晚静态绑定。1.self::用于静态方法和常量调用,但不支持晚静态绑定。2.parent::用于子类调用父类方法,无法访问私有方法。3.static::支持晚静态绑定,适用于继承和多态,但可能影响代码可读性。

PHP通过$\_FILES变量处理文件上传,确保安全性的方法包括:1.检查上传错误,2.验证文件类型和大小,3.防止文件覆盖,4.移动文件到永久存储位置。
