Symfonyob娱乐下载 4.3新增功能:HttpClient组件
警告:这篇文章是关于一个不受支持的Symfony版本。ob娱乐下载有些信息可能已经过时了。阅读最新的Symfony文档ob娱乐下载.
提供的
尼古拉斯Grekas
在# 30413.
HTTP请求(例如向第三方api)是开发web应用程序的开发人员经常需要的。在Syob娱乐下载mfony 4.3中,我们将使用一个名为HttpClient.
基本用法
的ob娱乐下载Symfony \ \ HttpClient \ HttpClient组件
类提供的HTTP请求是相当简单的:
1 2 3 4
使用ob娱乐下载\组件\HttpClient\HttpClient;$httpClient= HttpClient::create ();$响应=$httpClient->请求(“得到”,“https://api.github.com/repos/ob娱乐下载symfony/symfony-docs”);
与其他现有HTTP客户机的一个显著区别是请求()
呼叫不阻塞。换句话说,美元的反应
对象立即可用,代码执行可以继续。
以后,当你打电话来的时候getStatusCode ()
时,代码执行将停止,直到标头可用,并且当您调用getContent ()
,它将停止,直到完整的内容可用(但您可以使用流媒体的反应):
1 2 3 4 5 6 7 8
$statusCode=$响应->getStatusCode ();// $statusCode = 200$内容=$响应->getContent ();//返回服务器返回的原始内容(在本例中是JSON)/ / $内容= " {" id ": 521583年,“名字”:“symob娱乐下载fony-docs…}”$内容=$响应->toArray ();//将响应JSON内容转换为PHP数组/ / $内容= [id = > 521583,“名字”= >“symfony-doob娱乐下载cs”,…]
由于这种非阻塞行为,您可以多次调用请求()
执行并行请求,然后在启动所有请求后才访问响应的信息。
默认情况下,组件使用本地PHP函数来发出HTTP请求,因此不需要安装任何其他依赖项。但是,如果您的系统同时具有cURL库和PHP cURL扩展安装。
当响应的HTTP状态码不在200-299范围(即:3 xx
,4 xx
或5 xx
)你的代码应该处理它。如果你不这样做getHeaders ()
而且getContent ()
方法抛出适当的异常:
12 3 4 5 6 7 8 9 10 11 12 13
//此请求的响应将是一个403 HTTP错误$响应=$httpClient->请求(“得到”,“https://httpbin.org/status/403”);//此代码导致Symfony\Component\Hob娱乐下载ttpClient\Exception\ClientException//因为它不检查响应的状态代码$内容=$响应->getContent ();//执行此操作如果(200= = !$响应->getStatusCode ()) {//处理HTTP请求错误(例如重试请求)}其他的{$内容=$响应->getContent ();}
特性
新的HttpClient组件包含了许多有用的特性。所有这些都在文档中进行了解释:
- 支持HTTP基本和HTTP承载认证;
- 支持添加自定义查询字符串参数而且自定义HTTP报头;
- 允许上传数据使用字符串、闭包和PHP资源;
- 流媒体的反应按顺序获取响应块,而不是等待整个响应;
- 请求和响应缓存;
- HTTP客户端范围根据请求的URL自动配置客户端;
- PSR-7和PSR-18兼容性;
- MockHttpClient简化测试请求和响应。
ob娱乐下载Symfony框架集成
当在完整的Symfony应用程序中使用HttpClient而不是作为独立ob娱乐下载组件使用时,您可以在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
使用ob娱乐下载\合同\HttpClient\HttpClientInterface;类SomeService{私人$httpClient;公共函数__construct(HttpClientInterface$httpClient){$这->httpClient =$httpClient;}}
评论
在很长一段时间里,《Guzzle》确实有基于承诺的实现,所以在这方面,除了能够将响应分成块之外,它并没有太大的不同。
不过看起来不错:)
https://speakerdeck.com/nicolasgrekas/ob娱乐下载symfony-httpclient-what-else
评论截止。
为了确保评论保持相关性,旧帖子将被关闭。
与众所周知的GuzzleHttp有什么主要区别?
谢谢
这就是为什么组件本身没有实现PSR-18接口的原因之一(我们提供了一个到PSR的桥接,但是你会失去这个好处,因为桥接在返回PSR-7响应之前需要阻塞IO)。
Javier Eguiluz is a certified Symfony engineer.
Get certified! Online exams available in all countries.
Register Now