Как пройти через загрузку из источника https в соединение http? - PullRequest
3 голосов
/ 26 мая 2011

У меня есть URL-адреса следующего формата (я пишу как aregex):

http://exampledomain\.com/files/.+

URL запрашивается клиентом через мой прокси-сервер.

Я ввожу пользовательскийЗаголовок авторизации в этом запросе.Это не проблема, я могу сделать это с mod_proxy и mod_headers в apache.

Однако этот URL дает 302 перенаправление на другой источник, который, наконец, должен прийти к клиенту.

Этот другой URLSSL защищен и выглядит так:

https://example.+\.exampledomain.\com/files/.+/.+

Требуется тот же заголовок авторизации, что и у другого.Но так как он hTTPS, я не могу просто ввести его, используя заголовки мода.

Поэтому я планирую настроить обратный прокси-сервер, который я использую для запроса первого URL-адреса HTTP с заголовком авторизации.За ним находится скрипт, который извлекает запрос, анализирует второй URL-адрес HTTPS и загружает источник с пользовательским заголовком авторизации и передает полученный файл (байты и заголовки http) клиенту.

Я знаком сApache2 и PHP, поэтому было бы неплохо придерживаться этого.Но это не обязательно.

Просто чтобы уточнить, речь идет о ссылках на Rapidshare здесь.У моей компании есть резервные копии файлов и хранилище, потому что это самый дешевый облачный хостинг.Есть некоторые серверы заданий, которым нужно извлекать файлы, но я не могу настроить для них имя пользователя / пароль.Таким образом, прокси-сервер должен добавить информацию об аутентификации премиум-класса.

Я думал о чем-то вроде:

proxy.php - этот файл запрашивается с использованием обратного прокси-сервера и обслуживается веб-сервером.записано правилом перезаписи htaccess и прокси-сервером восстановления на http://one -or-my-domoains / request-uri-from-the-original-request (генерируется в apache)

$url = "http://example.com/".$_SERVER["REQUEST_URI"];
$opts = array(
  'http'=>array(
    'header'=>"Cookie: myauthvalue=example\r\n"
  )
);
$context = stream_context_create($opts);
stream_context_set_default($context);
$http_content = get_headers($url, 1);

$ssl_location = $http_content['Location'];

$fp = fsockopen("ssl://".parse_url($ssl_location, PHP_URL_HOST), 443, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    $out = "GET ".parse_url($PHP_URL_PATH, PHP_URL_HOST)." HTTP/1.1\r\n";
    $out .= "Host: ".parse_url($ssl_location, PHP_URL_HOST)."\r\n";
    $out .= "Cookie: myauthorization=something"; 
    fwrite($fp, $out);
    while (!feof($fp)) {
        echo fgets($fp, 128);
    }
    fclose($fp);
}

Таким образом, это должно в основном передать загрузку ssl стандартному http-соединению, которое инициирует пользователь, вместо перенаправления.

Мой вопрос сейчас: это будет работать?Я что-то пропустил?Есть ли какие-нибудь замечания?

Я думаю, что это будет разумное количество хлопот, включая настройку обратного прокси и все.

1 Ответ

0 голосов
/ 05 июня 2011

ну, в итоге я просто делал passthru ('wget ....'), который работает просто отлично;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...