使用 http-client 发起 HEAD请求验证文件是否存在,发现全是超时,改成GET就行?
function headRequest(string $url, array $headers = [])
{
static $httpClient;
if (!$httpClient) {
$httpClient = new Workerman\Http\Client([
'max_conn_per_addr' => 128, // 每个域名最大并发连接
'keepalive_timeout' => 15, // 长连接超时时间
'connect_timeout' => 10, // 连接超时(HEAD请求轻量,缩短为10s)
'timeout' => 10, // 响应超时(缩短为10s)
'context'=>[
'ssl'=>[
'verify_peer'=>false,
'verify_peer_name'=>false,
]
]
]);
}
// 发起请求
try {
// 发起HEAD请求,指定HTTP/1.1
$response = $httpClient->request($url, [
'method' => 'head',
'version' => '1.1',
// 'headers' => $headers
]);
$response->getBody();
return ['code'=>$response->getStatusCode(),'headers' => $response->getHeaders()];
} catch (\Throwable $th) {
//throw $th;
return ['err'=>500,'msg'=>$th->getMessage()];
}
}
msg: "read 116.153.78.164:443 timeout after 10 seconds"
"workerman/workerman": "5.1.6",
"workerman/webman-framework": "~2.1",
"workerman/http-client": "^3.0",
"revolt/event-loop": "^1.0",
更新 workerman/http-client 到3.0.6
composer require workerman/http-client ^3.0.6