Добрый вечер.
Столкнулся с такой проблемой: никак не удаётся получить файл с удалённого сервера. Какой формат файла - не известно (подозреваю, что json или xml, но кто ж его знает на самом деле).
Для начала запрашиваю файл.
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $q);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $b);
$out = curl_exec($curl);
//echo curl_error($curl);
//print_r(curl_getinfo($curl));
curl_close($curl);
Далее пошли танцы с бубном:
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($out));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($out));
ob_clean();
flush();
readfile($out);
В итоге получаю пустой файл без расширения. Однако сниффер ловит какой-то контент. Сохраняется он, если запрашивать на прямую, как байт-код:
789c ab56 4a2d 2aca 2f52 b2aa 564a ce4f
4955 b232 3432 30d4 514a 492d 4e56 b252
52aa ad05 00b2 7b0a 03
Далее, поиски привели меня к тому, что всё это дело заодно и сжато при помощи вот этой штуки
После прогона ответа от сервера через gzdecode() var_dump() говорит false. Отдаётся пустой файл, но с именем скрипта, на который отправляется, собственно, запрос.
Попытки поиграться с content-type в заголовках не привели ровно ни к чему.
Собственно, вопрос, возможно ли как-то всё таки узнать формат файла, и почему в итоге он становится пустым? В какую сторону копать? Заранее спасибо.
UPD
Провтыкал заголовок. Добавил curl_setopt($curl, CURLOPT_ENCODING , "gzip");
Стал возвращаться код файла. Сейчас буду пытаться распознать.
UPD 2.
И снова. Тип данных: двоичный файл.
Свежие комментарии