Я пытаюсь отправить в POST необработанный двоичный файл вместе с некоторыми другими данными, используя cURL.
По сути, я сделал это:
//Here i create the CURLFile
$cfile = new CURLFile($fullpath,'application/xml', $filename);
//Data to upload (including the file)
$data_upload = array('username' => $username,
'password' => $password,
'owner' => $owner,
'destination' => $pathpda,
'filename' => $filename,
'filedata' => $cfile);
//Upload
$ch_upload = curl_init($urlws.$e_upload);
curl_setopt($ch_upload, CURLOPT_POST,true);
curl_setopt($ch_upload, CURLOPT_POSTFIELDS, $data_upload);
curl_setopt($ch_upload, CURLOPT_RETURNTRANSFER, true);
$response_upload = curl_exec($ch_upload);
curl_close($ch_upload);
Все работало нормально За исключением того, что теперь я хочу, чтобы мой файл был просто двоичными данными, а не реальным файлом на диске. Также мне нужно отправить другие данные в запросе!
Кто-нибудь знает, как это сделать? Я посмотрел в Google, но не смог найти способ сделать и то и другое, отправив необработанный двоичный файл и другие данные.
Спасибо!
ОБНОВИТЬ
Чтобы уточнить мой вопрос, мне не нужно просто отправлять случайные двоичные данные, а скорее файл, содержимое которого происходит от ob_get_contents () (например), так что это не физический файл на диске. Если я просто заменил CURLfile для отправки данных двоичного файла переменной «filedata», это просто не работает. Веб-сервис не распознает файл. Возможно, есть способ создать CURL-файл без указания реального файла.
Точно так же, как вы делаете с другими переменными.
В конце все отправляется как «двоичный», или фактически в строковом представлении.
Так что просто
$content = ob_get_contents();
//or file_get_contents() or whatever source
$data_upload = array('username' => $username,
'password' => $password,
'owner' => $owner,
'destination' => $pathpda,
'filename' => $filename,
'filedata' => $cfile,
'allkindsofdata' => $content );
Хитрость заключается в том, чтобы превратить вашу двоичную строку в поток в памяти, а затем скажите curl, чтобы загрузить этот поток, используя: CURLOPT_INFILE, CURLOPT_INFILESIZE и CURLOPT_UPLOAD. Этот ответ предоставляет код для этого.