-X POST
примерно переводится как CURLOPT_POST=>1
, а -d 'data={//here goes a json with encoded file}'
примерно переводится как CURLOPT_POSTFIELDS=>json_encode(array('data'=>'here goes encoded file'))
, поэтому
$ch = curl_init('http://example.com/api/');
curl_setopt_array($ch, array(
CURLOPT_POST => 1,
CURLOPT_POSTFIELDS => json_encode(array(
'data' => base64_encode(file_get_contents('/home/vacation/test.xls'))
))
));
curl_exec($ch);
curl_close($ch);
.. но для загрузки бинарных файлов вы вообще не должны использовать json / base64, вы должны использовать multipart / form-data, кто бы ни придумал, что api, вероятно, не имел опыта создания web-apis, используя json и base64 хреновое дизайнерское решение, имо. (хуже всего то, что он использует примерно на 33% больше пропускной способности, чем multipart / form-data, но multipart также имеет встроенную поддержку из curl cli с параметром -F и встроенную поддержку PHP в параметре $ _FILES, и встроенная поддержка php-curl с классом CURLFile. Также сложно создать json & base64-реализацию, в которой весь файл не должен быть сразу в памяти для создания запроса на передачу)