Полагаю, вы уже нашли свой ответ.Тем не менее, я хотел бы поделиться своим сценарием, который хорошо работает, отправив JSON-запрос на сервер, который возвращает файл в двоичном формате, а затем загружает на лету.Сохранять не нужно.Надеюсь, это поможет!
ПРИМЕЧАНИЕ. Вы можете избежать преобразования данных поста в формат json.
<code><?php
// Username or E-mail
$login = 'username';
// Password
$password = 'password';
// API Request
$url = 'https://example.com/api';
// POST data
$data = array('someTask', 24);
// Convert POST data to json
$data_string = json_encode($data);
// initialize cURL
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, "$login:$password");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// Execute cURL and store the response in a variable
$file = curl_exec($ch);
// Get the Header Size
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
// Get the Header from response
$header = substr($file, 0, $header_size);
// Get the Body from response
$body = substr($file, $header_size);
// Explode Header rows into an array
$header_items = explode("\n", $header);
// Close cURL handler
curl_close($ch);
// define new variable for the File name
$file_name = null;
// find the filname in the headers.
if(!preg_match('/filename="(.*?)"/', $header, $matches)){
// If filename not found do something...
echo "Unable to find filename.<br>Please check the Response Headers or Header parsing!";
exit();
} else {
// If filename was found assign the name to the variable above
$file_name = $matches[1];
}
// Check header response, if HTTP response is not 200, then display the error.
if(!preg_match('/200/', $header_items[0])){
echo '<pre>'.print_r($header_items[0], true).'
';выход();} else {// Проверить ответ заголовка, если HTTP-ответ равен 200, затем продолжить.// Установить заголовок для PHP, чтобы сказать это, мы хотели бы скачать заголовок файла ('Content-Description: File Transfer');заголовок ('Content-Type: application / octet-stream');заголовок («Content-Transfer-Encoding: двоичный файл»);заголовок ('Истекает: 0');заголовок («Cache-Control: must-revalidate»);заголовок («Pragma: public»);заголовок ('Content-Disposition: attachment; filename ='. $ file_name);// выводим файл, который затем должен вызвать загрузку echo $ file;выход;}?>