使用http-client时,被访问的地址出现连接异常或者地址不存在时或者dns解析失败时,请求无法中止,且超时失效
如下图所示,迟迟无法得到响应,像是协程死锁
public function index()
{
$http = new \Workerman\Http\Client(['connect_timeout' => 3, 'timeout' => 3,]);
try {
$response = $http->request('https://www.asdasfowoefbowefbwe.com',['method' => 'GET'])->getBody()->getContents();
}catch (\Exception $e){
$response = $e->getMessage();
}
var_dump($response);
return $response;
}
root@7a179c6324dc:/var/www# php start.php start
Workerman[start.php] start in DEBUG mode
-------------------------------------------- WORKERMAN ---------------------------------------------
Workerman/5.1.3 PHP/8.1.31 (JIT off) Linux/6.6.87.2-microsoft-standard-WSL2
--------------------------------------------- WORKERS ----------------------------------------------
event-loop proto user worker listen count state
swoole tcp root webman http://0.0.0.0:8787 1 [OK]
swoole tcp root monitor none 1 [OK]
----------------------------------------------------------------------------------------------------
Press Ctrl+C to stop. Start success.
Warning: stream_socket_client(): Unable to connect to tcp://www.asdasfowoefbowefbwe.com:443 (DNS Lookup resolve failed) in /var/www/vendor/workerman/workerman/src/Connection/AsyncTcpConnection.php on line 269
Warning: stream_socket_client(): Unable to connect to tcp://www.asdasfowoefbowefbwe.com:443 (DNS Lookup resolve failed) in /var/www/vendor/workerman/workerman/src/Connection/AsyncTcpConnection.php on line 269
Workerman/5.1.3
PHP/8.1.31 (JIT off)
Linux/6.6.87.2-microsoft-standard-WSL2
workerman/http-client 3.0.4
workerman/webman-framework 2.1.2
swoole 5.1.7
这个错误 DNS Lookup resolve failed 表明 PHP 无法将目标域名解析为 IP 地址,核心原因是域名解析失败。
我知道是这个原因,但是出现这个错误后,程序直接就卡死了
正常情况下应该抛出异常,中止请求