Я пытался конвертировать зависание командной строки в php curl. Это служба IBM Speech to Text. Линия была следующим образом:Ошибка преобразования командной строки cURL в PHP cURL
curl -X POST -u "{username}":"{password}"
--header "Content-Type: audio/flac"
--data-binary @audio-file.flac
"https://stream.watsonplatform.net/speech-to-text/api/v1/recognize?timestamps=true&word_alternatives_threshold=0.9"
Я был попробовать это:
$url = "https://stream.watsonplatform.net/speech-to-text/api/v1/recognize?timestamps=true&word_alternatives_threshold=0.9";
$postData = array(
'upload' => '@D:\Others\xampp2\htdocs\test\test.wav',
'Accept' => "application/json",
);
foreach($postData as $key=>$value){
$fields_string .= $key.'='.$value.'&';
}
$fields_string = rtrim($fields_string, '&');
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_USERPWD, "MYUSER:MYPASS");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: audio/wav',
'continuous: true',
));
curl_setopt($ch, CURLOPT_BINARYTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch,CURLOPT_TIMEOUT,1000);
$result = curl_exec($ch);
echo curl_error($ch);
curl_close($ch);
var_dump($result);
Но я получаю это сообщение:
string(129) "{
"code_description": "Bad Request",
"code": 400,
"error": "Stream was 69 bytes but needs to be at least 100 bytes."
}"
Что может быть проблема? Любое предложение будет очень полезно.
Update
$postData = array(
'upload' => '@D:\Others\xampp2\htdocs\test\test.wav',
'Accept' => "application/json",
);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_USERPWD, "MYUSER:MYPASS");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: audio/wav',
'continuous: true',
));
curl_setopt($ch, CURLOPT_BINARYTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch,CURLOPT_TIMEOUT,1000);
$result = curl_exec($ch);
echo curl_error($ch);
curl_close($ch);
var_dump($result);
Теперь получаю эту ошибку:
string(139) "{
"code_description": "Bad Request",
"code": 400,
"error": "unable to transcode data stream audio/wav -> audio/x-float-array "
}"
Спасибо за предложение. Но теперь я получаю эту ошибку: string (139) "{ " code_description ":" Bad Request ", " code ": 400, " error ":" невозможно перекодировать поток данных audio/wav -> audio/x -float-array " }" – user3850712
любая причина, по которой ваша версия CLI использует файл flac, а версия php - .wav? .wav является контейнером и может содержать в основном любой вид кодека, который watson не может интерпретировать/понимать. –
Но они поддерживают файл .wav .. – user3850712