【发布时间】:2021-07-28 06:52:17
【问题描述】:
我目前正在 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
【问题讨论】:
-
请看这里是否有帮助:stackoverflow.com/questions/58288142/….
-
在这种特殊情况下的主机名似乎无法在 DNS 中解析,mxtoolbox.com/…
-
@CBroe 是的,我知道。也许我应该澄清一下。我正在使用的工具检查请求发回的状态代码,然后在数据库中设置检查链接是否有效的日期,并且它还放置状态(有效/无效)。问题出在那个链接上,即使它应该是无效的,它也会抛出一个 smfony 异常而不是将其设置为无效
-
那是因为错误发生了,甚至在它到达您检查状态代码的部分之前。请求无法从一开始就发出,所以您现在希望状态码从哪里来……?您首先需要去捕获异常。当你抓到一个时,让你的
validateUrl方法返回 null 或 false - 这可以与方法之外的实际状态代码区分开来。 -
@LBA no 即使我执行 getContent(false) 它仍然会抛出错误,即使解决方案的解释似乎正是我所需要的
标签: php symfony get httprequest