curl 在语音到文本沃森API上获取错误401

qltillow  于 2022-11-13  发布在  其他
关注(0)|答案(2)|浏览(126)

我正试图让我的php脚本向语音到文本API发送一个curl请求。
我在沃森控制台中配置了API,并安装了发送音频和apikey的脚本。

$url = 'https://stream.watsonplatform.net/speech-to-text/api/v1/recognize';
$file = '@files/WhatsApp Audio 2019-01-25 at 12.17.28 (1).flac';
$fields = array(
'file' => $file,
'continuous' => true
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERPWD, "apikey:KEY"); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: audio/flac')); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Transfer-Encoding: chunked'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
curl_setopt($ch, CURLOPT_MAX_SEND_SPEED_LARGE, 40000);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, TRUE);
$executed = curl_exec($ch);
var_dump($executed);

我总是得到这样的结果:
字符串(37)“{“代码”:401,“错误”:“未授权”}”

oo7oh9g9

oo7oh9g91#

在您的脚本中,您使用apikey:KEY作为凭据。我知道这听起来很明显,但最好仔细检查一下:您是否已将其替换为IBM控制台中的实际API密钥?如果您使用KEY作为密钥,那么,您得到401 unauthorized并不奇怪:)
还要注意,您的API密钥与一个特定的网关URL相关联,您也可以在IBM Cloud控制台中检索该密钥的相同位置找到它(请参见屏幕截图)。这就是您需要用于curl命令的URL。例如,在我的示例中,由于我创建了位置为伦敦的应用程序,因此URL为gateway-lon. watsonplatform. net。

70gysomp

70gysomp2#

我知道这是一个老职位。我只是想分享代码,为我工作(18/08/2022)。
我也遇到过类似的问题,比如我创建文件路径的方式就是问题所在。但现在它运行得很好,只需复制粘贴并点击刷新浏览器即可。
干杯干杯干杯

$fname = 'YourFilePath';  //Example: 'C:/audios/audio-file.flac;
$cfile = new CURLFile(realpath($fname));
$file = array ('file' => $cfile); 

$urlx = 'Paste here your url'; //It is something like this: https://api.us-south.speech-to-text.watson.cloud.ibm.com/instances/xxxxxxxxxxx
$curlx = curl_init();
curl_setopt($curlx, CURLOPT_URL, $urlx);
curl_setopt($curlx, CURLOPT_USERPWD, 'apikey:PASTE_EXACTLY_HERE_YOUR_API_KEY'); 
curl_setopt($curlx, CURLOPT_HTTPHEADER, ['Content-Type: audio/flac']); 
curl_setopt($curlx, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curlx, CURLOPT_POST, TRUE);
curl_setopt($curlx, CURLOPT_POSTFIELDS, $file);
curl_setopt($curlx, CURLOPT_MAX_SEND_SPEED_LARGE, 40000);
curl_setopt($curlx, CURLOPT_BINARYTRANSFER, TRUE);
  
$datax = curl_exec($curlx);
curl_close($curlx);
print($datax);

相关问题