问题描述
我目前正在 symfony 中开展一个项目,我的数据库中存储了很多链接。按下一个按钮,我想用 http 请求验证所有链接。
到目前为止,我在大多数情况下都可以正常工作:
public function validateUrl($query)
{
$response = $this->client->request(
'GET',$query
);
$statusCode = $response->getStatusCode();
return $statusCode;
}
public function validateall(UrlValidatorService $urlValidatorService)
{
$request = Request::createFromGlobals();
$referrer = $request->query->get('referrer');
$repository = $this->getDoctrine()->getRepository(Url::class);
$longUrls = $repository->findBy([],['id' => 'ASC']);
foreach($longUrls as $urlEntity)
{
$url = $urlEntity->getLongUrl();
$statusCode = $urlValidatorService->validateUrl($url);
$datestring = date('Y-m-d H:i:s');
if($statusCode == 200)
{
$urlEntity->setValidStatus('valid');
$urlEntity->setValidDate(new \DateTime($datestring));
}
if($statusCode >= 300)
{
$urlEntity->setValidStatus('invalid');
$urlEntity->setValidDate(new \DateTime($datestring));
}
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($urlEntity);
$entityManager->flush();
}
return $this->redirect($referrer);
}
正如我所说,这在大多数情况下都有效,但由于某些原因,这会出现一些错误,我不知道如何解决。任何帮助表示赞赏
无法捕获的错误示例: Example Error
解决方法
好的,所以我想通了。尽管 https://github.com/symfony/symfony/issues/34281 指出捕获错误不起作用,因为响应是懒惰的,但我能够像这样捕获它们:
public function validateUrl($query)
{
try{
$response = $this->client->request('GET',$query,['timeout' => 5]);
$response->getContent(false);
$statusCode = $response->getStatusCode();
}
catch (HttpExceptionInterface $e) {
$statusCode = '404';
}
// Exceptions like Timeout
catch (TransportExceptionInterface $e) {
$statusCode = '404';
}
return $statusCode;
}