0 / 0 / 0
Регистрация: 16.05.2014
Сообщений: 2
1

Редирект cURL

16.05.2014, 13:20. Показов 1460. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Стоит такая задача: Есть сайт, требующий авторизации. Есть регистрация (логин-пароль) на этом сайте.
И есть другой сайт, сидя на котором несколько менеджеров должны иметь возможность перейти на первый сайт, но только со своего сайта. Т.е. манагеры знают логин-пароль от своего сайта, но логин-пароль от первого сайта, на который должны переправляться, должен знать только админ.

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

Для простоты предположим, что на первом сайте авторизация HTTP Basic, и куки не требуются (если потребуется, то это тоже решаемо, только сперва придется получить и запомнить куки).
JS - функция открытия нового окна:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function OpenCabinet(act) {
    var url = 'cgi/cabinet.cgi?aspect=open&random='+ Math.random()+'&action='+act;
    var xmlHttp = getXmlHttp();
    xmlHttp.open("GET", url, true);
    xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xmlHttp.onreadystatechange = function() {
        if (xmlHttp.readyState == 4) {
            if (xmlHttp.status == 200) {
                var newWin = window.open();
                newWin.document.write(xmlHttp.responseText);
            }
            else alert('Error server request: '+xmlHttp.status);
        }
    }
    xmlHttp.send(null);
}
Скрипт cabinet.cgi:
Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    ($login, $password) = ('aaa', 'bbb');
    my $response;
    my $curl = WWW::Curl::Easy->new;
    $curl->setopt(CURLOPT_URL, 'http://www.somesite.ru/login.jsp');
    $curl->setopt(CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0");
    $curl->setopt(CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    $curl->setopt(CURLOPT_USERPWD, $login . ":" . $password);
    $curl->setopt(CURLOPT_HEADER, 1);
    $curl->setopt(CURLOPT_AUTOREFERER, 1);
    $curl->setopt(CURLOPT_COOKIESESSION, 1);
    #$curl->setopt(CURLOPT_RETURNTRANSFER, 1);
    $curl->setopt(CURLOPT_FOLLOWLOCATION, 1);
    $curl->setopt(CURLOPT_CONNECTTIMEOUT, 30);
    $curl->setopt(CURLOPT_UNRESTRICTED_AUTH, 1);
    $curl->setopt(CURLOPT_WRITEDATA, \$response);
    my $retcode = $curl->perform;
            
    print "Content-Type: text/html; charset=utf-8\n\n";
    print $response;
На выходе получается текст нормально залогиненной страницы нужного сайта, но именно полученный HTML-код, а не сама страница. Т.е. относительные ссылки на ней не работают и т.д. Нужен полноценный редирект.
Буду очень благодарен за подсказку, как это сделать.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.05.2014, 13:20
Ответы с готовыми решениями:

cURL и редирект
Доброго времени суток! хочу получить страницу по следующему адресу:...

CURL редирект на мобильную версию
Мне нужно если отправлен curl запрос по адресу vk.com/... сделать редирект на m.vk.com/... Как...

Авторизация curl (различие между curl и ajax запросами)
Есть ли различие в передаче данных в json формате через curl и ajax? Я хочу написать запрос,...

Curl команду превратить в php curl
команда: curl -s -F widget=$WIDGET -F secret=$SECRET -F amouser=$AMOUSER -F amohash=$AMOHASH -F...

3
63 / 38 / 6
Регистрация: 24.01.2013
Сообщений: 136
19.05.2014, 14:30 2
попробуйте организовать редирект средствами JS.
при нажатии на кнопку-отправляется форма запроса в cgi , в ответе от скрипта cgi получаете ( логин, пароль )
передаёте скрипту JS( он обрабатывает и переходит на нужный сайт ).
как то так.
0
0 / 0 / 0
Регистрация: 16.05.2014
Сообщений: 2
21.05.2014, 13:19  [ТС] 3
Да фокус в том, что сайтов несколько, и у каждого свой способ авторизации. У одних - HTTP Basic, у других - куки, у третьих - Post. Придется для каждого сайта свою функцию писать. cURL в этом плане как-то универсальнее, что задал в хедере - то и ушло.

К тому же так и не нашел тольковой информации, как средствами JS обеспечить HTTP Basic авторизацию.
Нет, конечно, можно подставлять URL вида
HTML5
1
HTTP://login:password@www.site.com
но этот способ не будет работать в IE без предварительной правки реестра.

Добавлено через 21 час 41 минуту
Пытался из полученного $response вырезать header и выводить только его, Location там уже есть. Но то ли лыжи не едут, то ли я чего-то не понимаю в этом.
0
63 / 38 / 6
Регистрация: 24.01.2013
Сообщений: 136
21.05.2014, 16:31 4
ещё, как вариант, использовать ваш прокси сервер через который будут идти запросы
но так как вы пытаетесь - я не думаю что получится.
0
21.05.2014, 16:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.05.2014, 16:31
Помогаю со студенческими работами здесь

Нужно создать редирект сайта случайным образом, Случайный редирект на 1 из 3 сайтов
Мне нужно написать код или скрипт чтобы при переходе на сайт сразу происходил редирект на 1 из 3...

Нужно создать редирект сайта случайным образом, Случайный редирект на 1 из 3 сайтов
Мне нужно написать код или скрипт чтобы при переходе на сайт сразу происходил редирект на 1 из 3...

Curl not a valid cUrl на windows
Есть такая функция. private function curl_send($url) { ob_start(); $ch = curl_init($url);...

cURL и VS’10
Решил начать изучать курл. Всё делал по туториалу. Платформа Win XP. Копировал все указанные...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru