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

Postman与PHP cURL调用OpenAI语音转录API的响应时间差异优化求助

Postman与PHP cURL调用OpenAI语音转录API的响应时间差异优化求助

嘿,我之前也碰到过类似cURL比Postman慢好几倍的情况,咱们一步步来排查和优化:

先排查最容易忽略的隐性耗时:文件读取

你用Postman是直接上传本地文件,而PHP代码是从服务器磁盘读取文件后再发送。这一步的耗时很可能被算进了API调用的总时间里——比如磁盘IO慢、文件权限问题导致读取延迟,甚至文件不存在的隐性报错都可能拖慢整个流程。

建议你在代码里加个计时,看看读取文件到底花了多久:

echo "Start reading file: ". time()."\n";
$filePath = '/var/lib/asterisk/sounds/en/restaurant/'.$voicefile.'.wav';
// 先检查文件是否存在,避免找不到文件的额外耗时
if (!file_exists($filePath)) {
    die("File not found: $filePath");
}
$file = new CURLFILE($filePath);
echo "Finished reading file: ". time()."\n";

切换到HTTP/2提升传输效率

Postman默认会使用HTTP/2,而你的代码用的是CURL_HTTP_VERSION_1_1。HTTP/2的多路复用特性能大幅提升和API服务器的通信速度,OpenAI的API也完美支持HTTP/2。把这个参数改成:

CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_2_0,

注意:需要你的服务器上的cURL版本支持HTTP/2,现在大部分主流环境都已经支持了,如果不支持的话建议升级cURL扩展。

优化Header和SSL验证

  • 你代码里加了cache-control: no-cache,但Postman里可能没有这个Header。这个Header可能会让OpenAI的API做额外的缓存校验,先去掉试试。
  • 开启CURLOPT_SSL_VERIFYPEER是生产环境的正确做法,但如果服务器的CA证书不是最新的,验证过程会很慢。可以临时改成false测试(生产环境绝对不能这么做),如果速度变快了,就赶紧更新服务器的CA证书包。

调整cURL连接参数

  • 新增CURLOPT_CONNECTTIMEOUT限制连接阶段的超时时间,避免连接卡住:
CURLOPT_CONNECTTIMEOUT => 5, // 5秒内连接不上就放弃
  • 你设置的TCP keepalive参数在某些环境下可能反而会增加延迟,可以先注释掉这些参数测试效果:
// CURLOPT_TCP_KEEPALIVE => 1,
// CURLOPT_TCP_KEEPIDLE => 2,
// CURLOPT_TCP_KEEPINTVL => 1,

检查PHP和cURL版本

旧版本的PHP cURL扩展可能存在性能瓶颈,建议升级到最新的稳定版(比如PHP 7.4+或者8.x),同时确保cURL版本是7.60以上——这些版本对HTTP/2和传输优化的支持更好。

优化后的完整示例代码

<?php

$curl = curl_init();

$voicefile = $argv[1];
$auth = $argv[2];

// 新增:检查文件读取耗时
echo "Start reading file: ". time()."\n";
$filePath = '/var/lib/asterisk/sounds/en/restaurant/'.$voicefile.'.wav';
if (!file_exists($filePath)) {
    die("File not found: $filePath");
}
$file = new CURLFILE($filePath);
echo "Finished reading file: ". time()."\n";

curl_setopt_array($curl, array(
    CURLOPT_URL => 'https://api.openai.com/v1/audio/transcriptions',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => '',
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_CONNECTTIMEOUT => 5, // 新增:限制连接超时
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_2_0, // 修改为HTTP/2
    CURLOPT_CUSTOMREQUEST => 'POST',
    // 暂时关闭keepalive测试
    // CURLOPT_TCP_KEEPALIVE => 1,
    // CURLOPT_TCP_KEEPIDLE => 2,
    // CURLOPT_TCP_KEEPINTVL => 1,
    CURLOPT_SSL_VERIFYPEER => true, // 确保CA证书最新
    CURLOPT_POSTFIELDS => array(
        'model' => 'whisper-1',
        'file'=> $file
    ),
    CURLOPT_HTTPHEADER => array(
        'Authorization: Bearer '.$auth
        // 移除cache-control header
    ),
));

echo "Seconds before API Call :". time()."\n";

$response = curl_exec($curl);

// 新增:检查cURL错误,方便排查问题
if(curl_errno($curl)) {
    echo 'Curl error: ' . curl_error($curl);
}

curl_close($curl);

echo $response;
echo "\n Seconds after API Call:" . time()."\n";
?>

先从文件读取的排查开始,这个是最常见的“隐性耗时”点,然后再一步步调整其他参数,应该能把响应时间降到和Postman差不多的水平。

备注:内容来源于stack exchange,提问作者VenkataRavi. CR

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 15:58:07