【发布时间】:2016-05-18 18:21:48
【问题描述】:
我在 Laravel 5.2 中编写了一些代码来从不可靠的 API 源中检索结果。但是,它需要能够在尝试失败时自动重试请求,因为 API 调用大约有三分之一的时间会导致 503。
我正在使用 Guzzle 来执行此操作,并且我想我知道将在处理 503 响应之前拦截它们的代码放在哪里;但我不确定在那里实际写什么。
guzzle 文档并没有提供太多的重试,而且我遇到的所有 Guzzle 6 示例都只显示了如何检索结果(我已经可以做到),而不是如何获取它如果需要,重复请求。
我绝不会要求任何人为我做这项工作 - 但我认为我正在接近我对此的理解极限。如果有人能指出我正确的方向,将不胜感激:)
编辑:
我会尝试修改。请考虑以下代码。在其中,我想发送一个通常会产生 JSON 响应的 GET 请求。
DataController.php
$client = new \GuzzleHttp\Client();
$request = $client->request('GET', 'https://httpbin.org/status/503'); // URI is for testing purposes
当这个请求的响应是 503 时,我可以在这里截取它:
Handler.php
public function render($request, Exception $e)
{
if ($e->getCode() == 503)
{
// Code that would tell Guzzle to retry the request 5 times with a 10s delay before failing completely
}
return parent::render($request, $e);
}
我不知道那是最好的地方,但真正的问题是我不知道在if ($e->getCode() == 503)里面写什么
【问题讨论】:
-
您好,欢迎来到 SO。阅读 how to ask 和 mcve 以了解更受欢迎的问题。
-
嗨,davejal,部分问题是,我不完全确定要写什么,但我试图更好地说明这个问题。如果这仍然没有帮助,请告诉我,我会再试一次。谢谢。
标签: php http middleware guzzle6