[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Закачка файла через proxy с авторизацией
mnk
Вобщем нужен subj.
Если без авторизации, то все ок. Что то типа
PHP
$fp = @fopen($open_url,"r",false,stream_context_create(array('http'=>array('agent'=>'WGET''proxy'=>$proxy'request_fulluri'=>true))));

А как с авторизацией - не знаю.
wget пользовать неохота, хотя если в php никак, то придется, наверно.



Спустя 10 часов, 44 минуты, 47 секунд (30.06.2009 - 23:37) PandoraBox2007 написал(а):
cURL

Спустя 15 часов, 9 минут, 52 секунды (1.07.2009 - 14:47) mnk написал(а):
Цитата (PandoraBox2007 @ 30.06.2009 - 20:37)
cURL

И что это значит?

Спустя 11 минут, 21 секунда (1.07.2009 - 14:59) kirik написал(а):
Цитата (mnk @ 1.07.2009 - 06:47)
И что это значит?

Спустя 1 час, 49 минут, 46 секунд (1.07.2009 - 16:48) mnk написал(а):
Ну установил я параметры сессии cURL, а файл то как потом закачать?

Спустя 13 минут, 51 секунда (1.07.2009 - 17:02) kirik написал(а):
Цитата (mnk @ 1.07.2009 - 08:48)
а файл то как потом закачать

в параметрах поставить собаку "@" перед путем до файла.
Посмотри второй пример тут или тыц или тыц

Спустя 20 часов, 8 минут, 43 секунды (2.07.2009 - 13:11) Guest написал(а):
В примерах осуществляется upload файлов, а мне нужен download
Сделал для пробы
PHP
<?
$ch curl_init("http://www.server.org.ru/dir/file.ver"); 
if (!
$ch) { 
    die(
"Couldn't initialize a cURL handle"); 
    } 
$fp fopen ("file.ver""w");

curl_setopt ($chCURLOPT_FILE$fp);
curl_setopt($chCURLOPT_HTTPPROXYTUNNEL1); 
curl_setopt($chCURLOPT_PROXY'172.16.130.128'); 
curl_setopt($chCURLOPT_PROXYPORT'3128'); 
curl_setopt($chCURLOPT_PROXYUSERPWD"misha:qwerty"); 
curl_exec ($ch);
curl_close ($ch);
fclose ($fp);
 

При этом, если не через прокси (заремарить все строчки про прокси), то файл закачивается, а через прокси - не хочет
(Прокси точно работает - проверено wget'ом).

Спустя 1 минута, 25 секунд (2.07.2009 - 13:12) mnk написал(а):
Предыдущий - это мой пост - забыл войти.

Спустя 1 час, 7 минут, 40 секунд (2.07.2009 - 14:20) kirik написал(а):
Попробуй поменять
PHP
curl_setopt($chCURLOPT_HTTPPROXYTUNNEL1);

на
PHP
curl_setopt($chCURLOPT_HTTPPROXYTUNNEL0);

Спустя 55 минут, 4 секунды (2.07.2009 - 15:15) mnk написал(а):
Цитата (kirik @ 2.07.2009 - 11:20)
Попробуй поменять
PHP
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);

на
PHP
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 0);

Так этим самым я запрещу применение прокси.
Или нет?
Цитата
CURLOPT_HTTPPROXYTUNNEL TRUE to tunnel through a given HTTP proxy.

Спустя 28 минут, 18 секунд (2.07.2009 - 15:43) PandoraBox2007 написал(а):
может у вас прокся HTTPS/Socks или не стандартная аутификация


PHP
if (!$ch = curl_init("http://www.server.org.ru/dir/file.ver"))
{
 
    die
("Couldn't initialize a cURL handle"); 
} 
$fp 
= fopen ("file.ver", "w");

$ret = curl_setopt($ch, CURLOPT_FILE,            $fp);
$ret = curl_setopt($ch, CURLOPT_HEADER,          1);
$ret = curl_setopt($ch, CURLOPT_FOLLOWLOCATION,  1);
$ret = curl_setopt($ch, CURLOPT_RETURNTRANSFER,  1);
$ret = curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);
$ret = curl_setopt($ch, CURLOPT_HTTPAUTH,        CURLAUTH_ANY);
$ret = curl_setopt($ch, CURLOPT_PROXY,           '172.16.130.128');
$ret = curl_setopt($ch, CURLOPT_PROXYPORT,       '3128');
$ret = curl_setopt($ch, CURLOPT_PROXYUSERPWD,    "misha:qwerty");
$ret = curl_setopt($ch, CURLOPT_TIMEOUT,         30);

curl_exec ($ch);

// Chek proxy BEGIN
if (empty($ret)) { 
    
// some kind of an error happened 
    echo curl_error($ch); 
    curl_close
($ch); // close cURL handler 
} else { 
    $info 
= curl_getinfo($ch); 
    curl_close
($ch); // close cURL handler
    if (empty($info['http_code'])) { 
            echo 
"No HTTP code was returned"; 
    
}
}
// Chek proxy END.
fclose ($fp);

Спустя 15 часов, 56 минут, 28 секунд (3.07.2009 - 07:40) mnk написал(а):
Большое спасибо за помощь.
Разобрался с закачкой. Работает со следующими опциями
PHP
if (!$ch = curl_init("http://www.server.org.ru/dir/file.ver"))
{
 
    die
("Couldn't initialize a cURL handle"); 
} 
$fp 
= fopen ("file.ver", "w");
$ret = curl_setopt($ch, CURLOPT_FILE,            $fp);
$ret = curl_setopt($ch, CURLOPT_HEADER,          0);
$ret = curl_setopt($ch, CURLOPT_FOLLOWLOCATION,  1);
//$ret = curl_setopt($ch, CURLOPT_RETURNTRANSFER,  0);
$ret = curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 0);
$ret = curl_setopt($ch, CURLOPT_HTTPAUTH,        CURLAUTH_ANY);
$ret = curl_setopt($ch, CURLOPT_PROXY,           '172.16.130.128');
$ret = curl_setopt($ch, CURLOPT_PROXYPORT,       '3128');
$ret = curl_setopt($ch, CURLOPT_PROXYUSERPWD,    "misha:qwerty");
$ret = curl_setopt($ch, CURLOPT_TIMEOUT,         30);

curl_exec ($ch);
curl_close($ch);
fclose($fp);

Все таки CURLOPT_HTTPPROXYTUNNEL дб 0, иначе не работает.
При наличии CURLOPT_RETURNTRANSFER и любым значением - не работает.
CURLOPT_HEADER дб 0Б иначе добавляет заголовок в файл.

Часть, которая проверяет ошибку закачки - у меня не работает. Дело в том, что у меня squid и он, в случае не авторизации, посылает файл, в котором говорится, что произошла ошибка авторизации.
Теперь осталась задача, как сделать универсальный обработчик ошибок, что бы не зависимо от типа прокси - он определял - выкачался или нет файл.

Спустя 52 минуты, 31 секунда (3.07.2009 - 08:32) mnk написал(а):
все разобрался, можно узнать по коду $info['http_code'], если 200, то все ок, если 407, то требуется авторизация, если другая , то тоже ошибка.
Большое спасибо за помощь.

Спустя 53 минуты, 53 секунды (3.07.2009 - 09:26) mnk написал(а):
Еще вопрос, как результат curl_exec ($ch) напрвить не в файл и не в стандартный вывод (экран), а в переменную?

Спустя 14 минут, 43 секунды (3.07.2009 - 09:41) mnk написал(а):
Все спасибо - сам разобрался.

Спустя 3 часа, 18 минут, 41 секунда (3.07.2009 - 13:00) mnk написал(а):
Все таки еще вопрос остался.
1. Как лучше поступить для экономии памяти - загрузить сразу в файл, а потом после проверки переписать в нужное место, или загрузить в переменную а потом, если все ок выгрузить в файл.
Файлы мб большие.
2. Как бы сделать, что бы был виден процесс загрузки. Все происходит в консоли. А то при больших файлах и не очень быстром инете приходится долго ждать, не зная грузится или нет файл. Без CURL у меня это было сделано на потоках, а тут так можно?

Спустя 4 часа, 33 минуты, 57 секунд (3.07.2009 - 17:34) kirik написал(а):
1. Думаю что лучше в файл писать
2. Попробуй этот вариант

Спустя 2 дня, 15 часов, 26 минут, 15 секунд (6.07.2009 - 09:00) mnk написал(а):
По загрузке. Поискал по инету - не нашел не одного приличного примера.
Добавил в cUrl строки
PHP
$ret curl_setopt($chCURLOPT_NOPROGRESSfalse);
$ret curl_setopt($chCURLOPT_PROGRESSFUNCTION'callback');
$ret curl_setopt($chCURLOPT_BUFFERSIZE512);

Далее функция для пробы.
PHP
function callback ($a=0,$b=0,$c=0$d=0)
{    echo 
"$a\n $b\n $c\n $d\n";
    return (
0);
}

Такое ощущение, что функция не вызывается. После того как заремил строку с CURLOPT_PROGRESSFUNCTION - ничего в выводе не изменилось.
Вообще, можно где то найти пример с использованием данной функции?

Спустя 1 час, 53 минуты, 25 секунд (6.07.2009 - 10:53) PandoraBox2007 написал(а):
CURLOPT_WRITEFUNCTION, CURLOPT_HEADERFUNCTION

Спустя 45 минут, 14 секунд (6.07.2009 - 11:38) mnk написал(а):
Цитата (PandoraBox2007 @ 6.07.2009 - 07:53)
CURLOPT_WRITEFUNCTION, CURLOPT_HEADERFUNCTION

Посмотрел эти опции, но так и не понял, как их прикрутить.
Может у маня php - старое -v5.2.4, а там написано, что работает только с 5.3?

Спустя 42 минуты, 42 секунды (6.07.2009 - 12:21) PandoraBox2007 написал(а):
на 5.2.9 пашет

Спустя 32 минуты, 13 секунд (6.07.2009 - 12:53) mnk написал(а):
Цитата (PandoraBox2007 @ 6.07.2009 - 09:21)
на 5.2.9 пашет

Так можно поподробнее. Может пример кода или URL. У меня тоже пашет, выдавая строку.
Код

 % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                Dload  Upload   Total   Spent    Left  Speed
101  4060  101  4060    0     0   842k      0 --:--:-- --:--:-- --:--:--  991k

А хотелось бы что то типа как в wget, хотя и это совсем не плохо.

Спустя 1 час, 46 минут, 19 секунд (6.07.2009 - 14:40) PandoraBox2007 написал(а):
прогресс бар в 5.3 есть только

Спустя 12 минут, 38 секунд (6.07.2009 - 14:52) PandoraBox2007 написал(а):
PHP
$ret curl_setopt($ch,CURLOPT_PROGRESSFUNCTION,'progress');


PHP
function progress($clientp,$dltotal,$dlnow,$ultotal,$ulnow)
{
  
echo "$clientp, $dltotal, $dlnow, $ultotal, $ulnow";
  return(
0);
}

Спустя 58 минут, 52 секунды (6.07.2009 - 15:51) mnk написал(а):
Спасибо, но у меня пока нет 5.3. Ставить из исходников не хочу, а репозитарии на Mandriva - 5.3 еще нет.
А этот код я уже видел. У меня он не работает.
А у Вас работает на 5.3?

Спустя 6 месяцев, 13 дней, 11 часов, 44 секунды (20.01.2010 - 03:52) Guest написал(а):
Цитата (mnk @ 6.07.2009 - 12:51)
Спасибо, но у меня пока нет 5.3. Ставить из исходников не хочу, а репозитарии на Mandriva - 5.3 еще нет.
А этот код я уже видел.  У меня он не <span class='darling'>работает</span>.
А у Вас <span class='darling'>работает</span> на 5.3?

Ты в определении своей callback-функции потерял самый первый параметр: $clientp:

function progress($clientp,$dltotal,$dlnow,$ultotal,$ulnow)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.