Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > как скачать файл c http-аутенификацией


Автор: TheAviator 5.4.2006, 11:34
сабж.
есть файлы с ограниченным доступом (выползает обычная табличка с запросом исени пользователя и пароля, которые мне известны.) Мне нужно копировать их автоматически с себе на сервер, желательно средствами Php
Каким образоом копируются фалы с внешнего сервера, когда они без пароля, и каким образом в моем случае?
Если средствами php невозможно, то какие есть еще идеи?
Заранее спасибо!

Автор: smartov 5.4.2006, 13:08
Когда ты пытаешься PHP запросить файл а там стоит авторизация, то в ответ ты получаешь такие хедеры

Код

HTTP/1.1 401 Authorization Required
Date: Tue, 25 Feb 2003 15:41:54 GMT
Server: Apache/1.3.27 (Unix) PHP/4.3.1
X-Powered-By: PHP/4.3.1
WWW-Authenticate: Basic realm="Bla bla bla..."
Connection: close
Content-Type: text/html

Или подобное.
Посему перед спрашивать файл нужно хедерами
Код

GET /admin/ HTTP/1.1
Host: www.superpuperhost.com
Authorization: Basic jTSAbT766yN0hGjUi

GET /admin/ HTTP/1.1
/admin/ - то что ты запршиваешь (/files/myfile.zip ...)

То что стоит после Authorization: Basic это base64 кодированные username:пароль

Пример скрипта для авторизации
Код

<?php

/* Access Configuration */
define ('x401_host', 'www.example.com');
define ('x401_port', 80);
define ('x401_user', 'your_username');
define ('x401_pass', 'your_password');

/* Function */
function get401Page($file) {
   $out  = "GET $file HTTP/1.1\r\n";
   $out .= "Host: ".x401_host."t\r\n";
   $out .= "Connection: Close\r\n";
   $out .= "Authorization: Basic ".base64_encode(x401_user.":".x401_pass)."\r\n";
   $out .= "\r\n";

   if (!$conex = @fsockopen(x401_host, x401_port, $errno, $errstr, 10))
       return 0;
   fwrite($conex, $out);
   $data = '';
   while (!feof($conex)) {
       $data .= fgets($conex, 512);
   }
   fclose($conex);
   return $data;
}

/* Code */
if ($source = get401Page('/absolute/path/file.php?get=value')) {
  echo $source;
} else {
  echo "I can't connect!";
}

?>


-
Мораль: http://ua2.php.net/features.http-auth

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)