You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中如何发起异步HTTPS请求?无需等待响应即可返回数据的实现方法

可行解决方案整理

方案1:修正fsockopen的HTTPS调用方式

fsockopen本身支持HTTPS请求,只需要在域名前添加ssl://或tls://前缀,端口改为443即可适配HTTPS场景,不需要额外切换技术栈:

  • 核心代码示例:
$host = 'ssl://你的目标域名';
$port = 443;
$timeout = 1;
$fp = fsockopen($host, $port, $errno, $errstr, $timeout);
if ($fp) {
    $out = "GET /图片下载接口路径 HTTP/1.1\r\n";
    $out .= "Host: 你的目标域名\r\n";
    $out .= "Connection: Close\r\n\r\n";
    fwrite($fp, $out);
    // 不需要等待返回结果,直接关闭连接即可
    fclose($fp);
}

注意:使用前需要确认PHP环境已开启openssl扩展,否则无法识别ssl协议前缀

方案2:使用cURL非阻塞请求

如果更习惯用cURL处理请求,可通过特殊配置实现请求发送后立即返回,不等待下载执行结果:

  • 核心配置项说明:
    • CURLOPT_TIMEOUT_MS 设置为100,即请求发送后最多等待100毫秒就直接结束
    • CURLOPT_NOSIGNAL 设置为true,避免短超时场景下抛出信号错误
    • CURLOPT_SSL_VERIFYPEER、CURLOPT_SSL_VERIFYHOST 按需配置适配HTTPS证书校验要求
  • 核心代码示例:
$ch = curl_init('https://你的图片下载完整地址');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT_MS, 100);
curl_setopt($ch, CURLOPT_NOSIGNAL, true);
// 生产环境建议开启证书校验,将下方参数改为true
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_exec($ch);
curl_close($ch);

方案3:生产环境高可靠方案:异步队列

如果对下载任务的可靠性有要求,可将下载任务写入内存队列(比如Redis队列),主请求写入队列后直接返回,另外启动独立的后台消费进程处理队列内的下载任务。该方案完全不阻塞主请求,还支持任务重试、失败统计等扩展能力,适合量级较大的业务场景。

内容的提问来源于stack exchange,提问作者Luân Tào

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 11:54:01