Скачаивание файла с удаленного сервера HTTP/HTTPS

neonet

Новичок
Скачаивание файла с удаленного сервера HTTP/HTTPS

Здраствуйте!
Мой скрипт перестал работать, после того как хозяева сервера сменили тип авторизации (Теперь HTTPS).
Раньше я выполнял копирование файла к себе на сервер таким образом:

PHP:
$file="http://".$mlogin.":".$mpass."@admin.servers.ru/cgi-bin/file_for_export.zip";
$nfile="on_my_server.zip";
function wwwcopy($file,$nfile)
{
   $fp = @fopen($file,"rb");
   while(!feof($fp))
   {
       $cont.= fread($fp,1024);
   }
   fclose($fp);

   $fp2 = @fopen($nfile,"w");
   fwrite($fp2,$cont);
   fclose($fp2);
}
wwwcopy($file,$nfile);
Сам файл осталься доступен по прежнему адрессу, но чтоб скачать его нужно произвести авторизацию на HTTPS.
Как мне это осуществить - авторизацию скриптом?

С прооколом HTTPS опыт работы не имею, подкинте ссылочку, а так же если не трудно и на cURL.
Спасибо...
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
[m]fopen[/m] > смотрите коментарии

[m]fsockopen[/m] > смотрите коментарии
 

neonet

Новичок
А можно ссылочку на cURL авторизацию на HTTPS сервер еси не трудно, думаю это то что мне нужно...
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Правильно собранный php поддерживает https-поток. Поддерживает или нет - можно узнать из phpinfo() - там выводится список всех потоков (streams).

Надо попробовать написать $file="https://"
Если не работает - собрать php с поддержкой open_ssl.
Если речь о хостинге - юзать правильный хостинг.

Если прямой fopen не работает с https - CURL скорее всего так же не потянет https. Обычно php собирается или с open_ssl или без.
Но были, кажется, старые версии php, где не было поддержки потока https, и там можно было работать через curl.
Если так - то вся нужная информация здесь:
http://php.net/curl

Zetruger file_get_contents надо советовать с оговоркой, что у скрипта может не хватить памяти скачать весь файл целиком.

-~{}~ 05.09.07 13:33:

Да, кстати, автор топика кажется не знает, что https - это не другой протокол, не новый тип авторизации, а тот же самый http, но по ssl-тунелю - т.е. с шифрованием данных.
 

neonet

Новичок
Попробую ещё раз обьяснить мой ситуэйшен:

Файл ранее доступный по адрессу:
http://логин:пароль@admin.site.ru/cgi-bin/export.zip - больше не актуален,

тоесть теперь чтоб скачать этот же файл нужно его вызывать по адрессу, http://admin.site.ru/cgi-bin/export.zip

но файл удачно скачаеться в том случае, если пройти предварительно авторизацию по адрессу https://login.site.ru где имееться форма входа.

я так понимаю, авторизация работает с куками и сессией.. а страничка имеет свой сертефикат.

Пробывал так:

PHP:
$p="login=Логин&password=Пароль"; 

$ch=curl_init("https://login.site.ru"); 

curl_setopt($ch, CURLOPT_POST, 1); // POST запрос 
curl_setopt($ch, CURLOPT_POSTFIELDS, $p); // передаем POST параметры 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1); // HTTPS запос с проверкой действительности сертификата 
ob_start(); 
$af=curl_exec($ch); 
$curl_err=curl_error($ch); 
$af=ob_get_contents();
ob_end_clean();
curl_close($ch); 
echo $af;
Но никакой авторизации скрипт не проходит, выдает скрипт ту самую форму для ввода логина и пароля.
Так же на сайте помимо login & passwor имеються и скрытые hidden поля, с данными - судя по всему генерирующияся скриптом.

Суть такова, что для каждого юзера, файл http://admin.site.ru/cgi-bin/export.zip индивидуален, в зависимости от введенного логина и пасса.

Вообщем никак не могу разобраться как пройти авторизацию.. после чего я наконец смогу безпрепятсвенно, скачать нужый мне файл....
Направте меня плиз в нужную сторону, где копать? :confused:
 

Beavis

Banned
а если добавить после curl_init() вот это?

$cookie_jar = "cookie.txt";
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_jar);
 

neonet

Новичок
Я уже, как тока не пробывал, и сертефикат тоже скачал, вообщем вот такой вот код получился:

PHP:
<?
$url="https://login.mobile.de";
$params="username=user&password=pass";
$cert="cert.cer";
$cookie_jar = "cookie.txt";
$ch=curl_init();
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_jar);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT,  $defined_vars[HTTP_USER_AGENT]);
curl_setopt($ch, CURLOPT_CAINFO, $cert);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYRESULT, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);

$result=curl_exec ($ch);
echo $result;

curl_close ($ch);
?>
И в итоге всё равно не логиниться*(

А по каким критериям я запрос должен делать? нужен ли мне сертификат к примеру подключать? я полагаю., это 1-ое в чём мне разобраться нада...
Нужно ли мне выдирать из контента hidden поля:?

Сертификат скачал вручную, в кодировке base64.

Вообщем то вот сама форма прохождения авторизации%:
https://login.mobile.de
 
Сверху