Я пытаюсь преобразовать команду curl, которая будет использоваться в php-скрипте
curl -k -F "request={'timezone':'America/New_York','lang':'en'};type=application/json" -F "[email protected];type=audio/wav" -H "Authorization: Bearer x" -H "ocp-apim-subscription-key:x" "http://example.com"
и вот мой php-скрипт
<?
$data = array("timezone" => "America/New_York", "lang" => "en", "voiceData" => "d8696c304d09eb1.wav");
$data_string = json_encode($data);
$ch = curl_init('https://example.com');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-type: application/json',
'Authorization: Bearer x',
'ocp-apim-subscription-key:x')
);
$result = curl_exec($ch);
?>
Я понимаю, что бит аудиофайла отправки не прав, но я не могу найти пример, как опубликовать его.
Я отредактировал это в ответ на постовые поля, но если я включу $ ch, я не получаю никакого вывода, если не включать вывод, жалуется, что нет почтового запроса. Есть идеи?
<?
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$ch = curl_init('https://example.com');
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-type: application/json',
'Authorization: Bearer x',
'ocp-apim-subscription-key:x')
);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS,
array('request' => json_encode(array('timezone' => 'America/New_York', 'lang' => 'en')),
'voicedata' => new CURLFile("d8696c304d09eb1.wav")
)
);
$result = curl_exec($ch);
echo $result;
?>
В поле POST отсутствует request=
. Кроме того, отправка файлов с использованием @filename
устарела, вы должны использовать класс CURLFile
.
curl_setopt($ch, CURLOPT_POSTFIELDS,
array('request' => json_encode(array('timezone' => 'America/New_York', 'lang' => 'en')),
'voicedata' => new CURLFile("d8696c304d09eb1.wav")
)
);
$data = array("request" => json_encode(array("timezone" => "America/New_York", "lang" => "en")) . ";type=application/json", "voiceData" => "@d8696c304d09eb1.wav;type=audio/wav");
Затем удалите$data_string
и просто используйте$data
в строкеCURLOPT_POSTFIELDS