当前位置: 首页 > 知识库问答 >
问题:

用狂饮捕捉CUrl超时异常

益思博
2023-03-14

我正在尝试为一些网站检索超文本标记语言。我正在使用PHPfile_get_contents它运行得非常好,但是很慢,而且有点有限,所以我决定试试Guzzes。不幸的是,我发现很难阻止Guzzes抛出异常,即使使用他们记录的异常处理。我的代码非常简单:

    $websiteFQDN = 'http://acme.biz';

    $client = new \GuzzleHttp\Client(['http_errors' => false,'verify' => false, 'connect_timeout' => 121 ]);

    echo '<h3>'.$websiteFQDN.'</h3>';
    try {
        $res = $client->request('GET', $websiteFQDN);
        echo '<p>Appears Successful</p>';
    }
    catch (RequestException $e){
        echo '<p>Exception Caught</p>';
    }

我不断得到以下错误:

GuzzleHttp\Exception\ConnectException cURL错误28:无法连接到acme.biz端口80:超时(参见https://curl.haxx.se/libcurl/c/libcurl-errors.html)

关于为什么上面没有捕获异常并允许该过程继续的任何建议?在我的测试中,它循环遍历大约20个域,没有任何问题,但我得到上面的错误并将其杀死。

Laravel 7.0|古兹7.0.1|PHP 7.2.5

有人建议尝试Laravel HTTP客户端,但不幸的是,它也遇到了同样的问题,因为它使用了Guzzle,而Guzzle又使用了CUrl,我所做的只是增加了抽象层。我用这段代码试了一下:

    $response = Http::withOptions(['verify' => false])->get($websiteFQDN);
    if($response->successful()){
        echo '<p>Appears Successful</p>';
    }else{
        echo '<p>Exception Caught</p>';
    }

当我尝试使用Laravel HTTP vanilla时,我得到了这里提到的“cURL错误60:SSL证书”错误。我添加了“验证”=

我假设一定有一种方法可以处理域列表并获取它们的超文本标记语言,而无一例外地扼杀该过程?

共有1个答案

申屠飞
2023-03-14

您正在使用Laravel 7. x。

您也可以使用Laravel提供的这个HTTP-CLIENT。它也在后面使用Guzzes。

使用此外观:

use Illuminate\Support\Facades\Http;

您可以简单地这样编写请求。

Http::get([URL]);

在您的情况下,您可以对此进行修改。

Http::get('http://acme.biz');

如果您想要json响应,您也可以这样做:

$response = Http::get('http://acme.biz')->json();
return $response;
 类似资料:
  • 我在使用古斯的时候有奇怪的问题 当我试图模拟一个错误的请求(例如,返回状态码404的请求)时,Guzzle抛出一个ClientException,其中包含该请求失败的所有细节。 当我试图捕捉这个异常时,我的脚本退出,并带有一个致命的错误,说明我没有捕捉到异常,它显示了一个XDebug跟踪,说明我有一个内存泄漏。 我的代码如下所示: 注意:httpClient是GuzzleHttp/CLient的有

  • 我们正在尝试使用 guzzle 执行并发异步请求。在浏览了一些资源(例如这样和这样)之后,我们提出了一些在下面共享的代码。但是,它没有按预期工作。 看起来Guzzle正在同步而不是异步地处理这些请求。 出于测试目的,我们点击一个内部url,它会Hibernate5秒钟。当并发数为10时,我们预计所有10个请求最初将被排队并几乎同时发送到服务器,在那里它们将等待5秒钟,然后几乎所有的请求将几乎同时完

  • 本文向大家介绍.NET Framework 捕捉异常,包括了.NET Framework 捕捉异常的使用技巧和注意事项,需要的朋友参考一下 示例 在特殊情况下,代码可以并且应该引发异常。例如: 尝试阅读流的末尾 没有访问文件的必要权限 尝试执行无效的操作,例如被零除 从Internet下载文件时发生超时 调用方可以通过“捕获”它们来处理这些异常,并且仅应在以下情况下进行: 它实际上可以解决特殊情况

  • 然后我把它用作: 但是最后一行代码没有捕获任何异常,我的代码给出运行时异常并停止。你能解释为什么会发生这种情况,如果可能的话,如何修复它吗?

  • 在节点中。在js服务器上,捕获SIGTERM和捕获SIGINT有什么区别吗? 我认为进程不应该能够防止SIGINT关闭? 我是否能够捕获两个信号并阻止退出?我的实验表明答案是肯定的,但从我所读到的内容来看,SIGINT总是假设关闭一个进程。 或者我把SIGINT和SIGKILL混淆了?也许SIGKILL是我无法恢复的信号? 捕捉这些信号当然可以让我优雅地关机: 我想我把SIGINT和SIGKILL

  • 我已经用Java编写代码一段时间了。但有时,我不知道什么时候应该抛出异常,什么时候应该捕获异常。我正在做一个有很多方法的项目。层次结构是这样的- 所以目前我正在做的是-我在所有方法中抛出异常并在方法A中捕获它,然后将其记录为错误。 但我不确定这是否是正确的方法?或者我应该开始在所有方法中捕获异常。这就是为什么这种混乱始于我的 - 我什么时候应该抓住异常与何时应该抛出异常。我知道这是一个愚蠢的问题,