Скачивание файла с чужого сервера на свой

271
29 июля 2017, 06:36

Ссылка имеет формат: https://app.comagic.ru/system/media/talk/?key=db5e7a6f328b3a6646fe09ef54da76dd&call_session_id=317461689

С браузера все открывается

Если использовать курл:

$curl_handle=curl_init();
curl_setopt($curl_handle, CURLOPT_URL,$url);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl_handle,CURLOPT_HEADER,true);
curl_setopt($curl_handle, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 5.2; rv:6.0.2) Gecko/20100101 Firefox/6.0.2');
$fileString = curl_exec($curl_handle);
print_r(curl_getinfo($curl_handle));  
curl_close($curl_handle);

То получаю такое:

Array
(
    [url] => https://app.comagic.ru/system/media/talk/?key=db5e7a6f328b3a6646fe09ef54da76dd&call_session_id=317461689
    [content_type] => 
    [http_code] => 0
    [header_size] => 0
    [request_size] => 0
    [filetime] => -1
    [ssl_verify_result] => 20
    [redirect_count] => 0
    [total_time] => 0.046891
    [namelookup_time] => 0.000999
    [connect_time] => 0.010747
    [pretransfer_time] => 0
    [size_upload] => 0
    [size_download] => 0
    [speed_download] => 0
    [speed_upload] => 0
    [download_content_length] => -1
    [upload_content_length] => -1
    [starttransfer_time] => 0
    [redirect_time] => 0
    [redirect_url] => 
    [primary_ip] => 195.211.120.36
    [certinfo] => Array
        (
        )
    [primary_port] => 443
    [local_ip] => 87.236.20.107
    [local_port] => 42032
)

Пробовал также file_get_contents - тоже получаю bool(false). Причем ранее все работало, код не менялся. Возможно сервис поставил какую то защиту на такого рода скачивание. Как быть? Может кто подсказать куда копать?

Answer 1

Скорее всего защита, попробуйте поэкспериментировать с UserAgent и Proxy, а также проверьте, скачивается ли сейчас с вашего IP файл в нормальном режиме. Вполне возможно, что на сервере сработал защитный механизм, который привязан к IP-адресу.

Еще возможный вариант - запрос Cookies перед отправкой файла. Особенно меня наталкивает на эту мысль параметр call_session_id=317461689. Обычно его вставляют, чтобы проверить, совпадает ли session_id в Cookies с тем, что запрашивает браузер.

Сам адрес:

https://app.comagic.ru/system/media/talk/

Это обращение к скрипту, который выдает файл, и он может запросить и проверить любые данные, которые отправляет клиент.

Также может быть ответ с редиректом. Когда вышеуказанный скрипт ничего не отправляет пользователю, а перенаправляет его на другой скрипт, который и выдает файл. Браузер эту ситуацию обрабатывает нормально, а вот cURL не знает, что там несколько запросов.

Answer 2

В варианте с курл проблема решилась установкой:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
READ ALSO
Действие (sql update) по кнопке в GridView

Действие (sql update) по кнопке в GridView

Необходимо по нажатию на галочку напротив строки присваивать ей статус ready (поле в бд) и скрывать по тому же фильтру (ready)Есть sql команда, есть...

202
Как сделать фильтр товаров для интернет магазина на laravel?

Как сделать фильтр товаров для интернет магазина на laravel?

Подскажите, как сделать правильный фильтр товаров? Сейчас делаю так:

741
регулярные выражения php

регулярные выражения php

Имеется регулярное выражение:

268
Два задания с указателями на C++

Два задания с указателями на C++

Посмотрите пожалуйста правильно ли я делаю?

306