新在Symfo欧宝娱乐app下载地址ny 4.3: HttpClient组件
警告:这篇文章是关于一个不受支持的Symfony的版本。欧宝娱乐app下载地址其中一些信息可能是过时了。阅读最近的Symfony文档欧宝娱乐app下载地址。
提供的
尼古拉斯Grekas
在# 30413。
使HTTP请求(如第三方api)是一个经常需要在web应用程序开发人员。在Sy欧宝娱乐app下载地址mfony 4.3我们将这个简单的用一个全新的组件HttpClient。
基本用法
的欧宝娱乐app下载地址Symfony \ \ HttpClient \ HttpClient组件
类提供了HTTP请求是很简单的:
1 2 3 4
使用欧宝娱乐app下载地址\组件\HttpClient\HttpClient;美元httpClient= HttpClient::create ();美元响应=美元httpClient- >请求(“得到”,“https://api.github.com/repos/欧宝娱乐app下载地址symfony/symfony-docs”);
一个重要的区别与其他现有的HTTP客户端是请求()
电话不是阻碍。换句话说,美元的反应
对象是立即可用,可以继续执行的代码。
之后,当你调用getStatusCode ()
,代码将会停止执行,直到头是可用的,当你调用getContent ()
,它会停止,直到完整内容是可用的(但你可以使用流媒体的反应):
1 2 3 4 5 6 7 8
美元statusCode=美元响应- >getStatusCode ();/ / statusCode = 200美元美元内容=美元响应- >getContent ();/ /返回原始内容服务器返回的JSON(在本例中)/ / $内容= " {" id ": 521583年,“名字”:“sym欧宝娱乐app下载地址fony-docs…}”美元内容=美元响应- >toArray ();/ /将响应JSON内容转换成一个PHP数组/ / $内容= [id = > 521583,“名字”= >“symfony-do欧宝娱乐app下载地址cs”,…]
由于这种非阻塞行为,可以使多个调用请求()
执行并行请求然后访问的信息后才开始所有请求的响应。
默认情况下,组件使用本机PHP函数的HTTP请求,所以你不需要安装任何其他依赖项。然而,它将使用cURL基础运输如果你的系统有两个cURL库和PHP cURL扩展安装。
当响应的HTTP状态代码没有在200 - 299范围内(即。3 xx
,4 xx
或5 xx
预计)代码来处理它。如果你不这样做,getHeaders ()
和getContent ()
方法抛出一个适当的异常:
1 2 3 4 5 6 7 8 9 10 11 12 13
/ /请求的响应将是一个HTTP 403错误美元响应=美元httpClient- >请求(“得到”,“https://httpbin.org/status/403”);/ /这段代码的结果在一个Symfony \ \ C欧宝娱乐app下载地址lientException组件\ HttpClient \异常/ /因为它不检查响应的状态码美元内容=美元响应- >getContent ();/ /这样做如果(200年= = !美元响应- >getStatusCode ()) {/ /处理HTTP请求的错误(例如重试请求)}其他的{美元内容=美元响应- >getContent ();}
特性
新HttpClient组件是挤满了有用的特性。他们都是文档的解释:
- 支持HTTP基本和HTTP持票人认证;
- 支持添加自定义查询字符串参数和自定义HTTP标头;
- 允许上传数据使用字符串,闭包和PHP资源;
- 流媒体的反应得到的响应顺序块而不是等待整个反应;
- 请求和响应缓存;
- 范围HTTP客户端自动配置的客户端根据请求的URL;
- PSR-7和PSR-18兼容性;
- MockHttpClient为了简化测试请求和响应。
欧宝娱乐app下载地址Symfony框架集成
当使用HttpClient内部完整的Symfony应用程序,而不是作为一欧宝娱乐app下载地址个独立的组件,您可以配置它http_client
键(查看完整的HttpClient配置参考):
1 2 3 4 5 6
#配置/包/ framework.yaml框架:#……http_client:max_redirects:7max_host_connections:10
然后,您可以注入的HttpClient其他服务如下:
1 2 3 4 5 6 7 8 9 10 11
使用欧宝娱乐app下载地址\合同\HttpClient\HttpClientInterface;类SomeService{私人美元httpClient;公共函数__construct(HttpClientInterface美元httpClient){美元这- >httpClient =美元httpClient;}}
未来的集成
拥有一个Symfony的默认和官方HTTP客户端应用程序将使我们能够实现其他功能要求与第三方欧宝娱乐app下载地址沟通服务。这是最近的一个例子NotCompromisedPassword验证器,这使得应用程序更安全使用HttpClient组件进行检查所需的HTTP请求给定密码公开妥协是或不是。
此外,水银组件也是新HttpClient切换当前的HTTP客户端组件(看到公关# 8)。最后,API的平台将介绍一套新的API测试工具用HttpClient组件(看到公关# 2608)。
评论
狂饮有基于承诺的实现很长一段时间,所以这不是真的那么多不同的除了在块流响应的能力。
不过看起来不错:)
https://speakerdeck.com/nicolasgrekas/欧宝娱乐app下载地址symfony-httpclient-what-else
评论都关门了。
以确保评论保持相关,他们关闭了旧的帖子。
众所周知GuzzleHttp的主要差异是什么?
谢谢
的原因之一的组件本身不实现PSR-18接口(PSR我们提供一座桥,但您将松散,受益的桥需要块IO返回之前PSR-7响应)。
Javier Eguiluz is a certified Symfony engineer.
Get certified! Online exams available in all countries.
Register Now