Авторизация через curl

S
На сайте с 11.01.2011
Offline
39
1937

Здравствуйте.

Мне нужно получить страницу с информацией с турами с сервиса Библио Глобус. У них изменился способ авторизации и с ним у меня пока проблема. У них есть API по выгрузке но по авторизации не очень много написано http://export.bgoperator.ru/load-xml-prices.html. Как и написано инстурукции я получил значения куков A, L и Z. Если авторизироваться на сервисе через браузер и зайти например на $url = 'http://export.bgoperator.ru/yandex?action=resorts' там будет http://awesomescreenshot.com/0cd5krt977. Мне нужно получить это все в php. Дальше с помощью curl я хочу вытащить данные например по турам.


$header = array(
'Accept-Encoding: gzip',
);

$cookie = "A=" . $a . ";L=" . $l . ";Z=" . $z;

$curl = curl_init();
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_URL, $url);
//Настойка опций cookie
curl_setopt($curl, CURLOPT_COOKIE, $cookie);
curl_setopt($curl, CURLOPT_USERAGENT, "Opera/10.00 (Windows NT 5.1; U; ru) Presto/2.2.0");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 5);
curl_setopt($curl, CURLOPT_HEADER, 1);
$result = curl_exec($curl);
curl_close($curl);

В $a, $l и $z значения кук, $url = 'http://export.bgoperator.ru/yandex?action=resorts'

Но в $result я получаю страницу что по $url но для неавторизированого пользователя , тоесть выдает код с «Регистрация для агентств»,«Регистрация для частных лиц»

Как мне улучшить код что б проходила авторизация и я мог получить нужную информацию?

Верстка страниц, писем, создание лендингов(landing page), cms Drupal 7. скайп: Shefarik277 , icq:486626408 Тема на форуме Античат (http://forum.antichat.ru/showthread.php?p=3671115#post3671115)
дани мапов
На сайте с 06.09.2012
Offline
204
#1

Попробуйте по примеру http://xdan.ru/avtorizacija-na-sajte-pri-pomoshhi-curl-php.html , доступно описано.

Написание и доработка скриптов (PHP, MySQL, JavaScript, jQuery) (/ru/forum/811046)
S
На сайте с 11.01.2011
Offline
39
#2

Видел эту статью и много подобных, сейчас обновил код до:


$header = array(
'Accept-Encoding: gzip',
);

$cookie = "A=" . $a . ";L=" . $l . ";Z=" . $z;
$path = drupal_get_path('module', 'bgtours_importer');

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $login_url);
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_COOKIEJAR, $path . '/cookie.txt');
curl_setopt($curl, CURLOPT_COOKIEFILE, $path . '/cookie.txt');
curl_setopt($curl, CURLOPT_USERAGENT, "Opera/10.00 (Windows NT 5.1; U; ru) Presto/2.2.0");
// curl_setopt($curl, CURLOPT_HEADERFUNCTION, "getCookie");
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, //тут переменные которые будут переданы методом POST
array (
'login' => 'a21621&pwd',
'pwd' => '~s0JVu9)(8PJRFt7o0kV',
));
// curl_setopt($curl, CURLOPT_COOKIE, $cookie);
$result = curl_exec($curl);
drupal_set_message('<pre><b>Debug 1:</b> ' . check_plain(print_r($result, 1)) . '</pre>');
if(!$result) {
$error = curl_error($curl).'('.curl_errno($curl).')';
drupal_set_message('<pre><b>Debug curl_error:</b> ' . check_plain(print_r($error, 1)) . '</pre>');
}
else{
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_URL, $url);
//Настойка опций cookie
curl_setopt($curl, CURLOPT_COOKIE, $cookie);
curl_setopt($curl, CURLOPT_USERAGENT, "Opera/10.00 (Windows NT 5.1; U; ru) Presto/2.2.0");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_COOKIEJAR, $path . '/cookie.txt');
curl_setopt($curl, CURLOPT_COOKIEFILE, $path . '/cookie.txt');
$result = curl_exec($curl);
}
curl_close($curl);
drupal_set_message('<pre><b>Debug 2:</b> ' . check_plain(print_r($result, 1)) . '</pre>');

пока всеравно в конце в $result страница для не авторизированого пользователя, получил 2 дебага с таким результатом :

Debug 1: HTTP/1.1 100 Continue

HTTP/1.1 200 OK
Server: nginx
Date: Mon, 25 Jan 2016 21:02:59 GMT
Content-Type: text/html;charset=utf-8
Content-Length: 1098
Connection: keep-alive

<html><head><title>Страница авторизации</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/></head><body><FORM NAME="cf" action="https://login.bgoperator.ru/auth" method=post><table style="border:3px double #6699CC;padding:15px;color:#003366;" align="center"><tr><td colspan="2" align="center" style="font-weight:bold;font-size:18px;text-decoration:underline;">Авторизация</td></tr><tr><td style="font-weight:bold;text-align:right;vertical-align:middle;">Имя пользователя: </td><td><INPUT TYPE="text" id="login" NAME="login" style="border:1px solid #999;width:200px;" value=""></td></tr><tr><td style="font-weight:bold;text-align:right;vertical-align:middle;">Пароль: </td><td><INPUT TYPE="password" id="pwd" NAME="pwd" style="border:1px solid #999;width:200px;"></td></tr><tr><td colspan="2" style="vertical-align:bottom;text-align:right;"><INPUT TYPE="submit" Value="Отправить" style="border:1px solid #999;padding:4px 10px;color:#003366;font-weight:bold;background:#fff;"></td></tr></table></form></body></html>


Debug 2: HTTP/1.1 100 Continue

HTTP/1.1 401 Unauthorized
Server: nginx
Date: Mon, 25 Jan 2016 21:02:59 GMT
Content-Type: text/html;charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Set-Cookie: Z=Q3QB-zR2Bf2IfrhauIdKQypqoDR6MIuWbLAt5aIjGwQsTFcfbD2Anw-8ia63HahpsXrq9c3guFNFRQyPvCQIbYxrOkzwINwEH2YoiuGJayLGNsCk6xY9ngUkAIoIXhnwm5Z3_fm1DxEM76OJDzQkSKCyKEPVOidxIID1K6qPcphTHSHhts0C_F1EbgQAY9sF7NEQFYl70qCLFwyJ90To7oH4S5eBa7aEU_e_cFdOsZE9lSZE3v5pe0pYnJ-x9DOGlD1qYJzywfzO2hAwG8y2Hw; path=/; domain=.bgoperator.ru; HttpOnly;

<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
<title>Авторизация</title>
<link rel="stylesheet" type="text/css" href="/css/style_price.css?v=2.2.3" media="all">
<link rel="stylesheet" href="/v2/css/v2.css?v=2.2.3" />
<script type="text/javascript" language="JavaScript" src="/calendar3.js"></script>
<script type="text/javascript" language="JavaScript" src="/js/jquery-1.8.3.min.js"></script>
<style>
.txt { color: #000000; margin: 15px; font-size: 14px; }
.txt p { margin-top: 20px; }
.pr a { font-weight: bolder; color: #333399; font-size: 14px; text-decoration: underline; margin-left: 20px; }
.ag a { font-weight: bolder; color: #990000; font-size: 14px; text-decoration: underline; margin-left: 20px; }
</style>
</head>
<body class="page-inner">
<header class="b-hd" id="header">
</header>
<div id="main" class="clr content">

<article>
<table border=0><tr><td width=33% valign=top>
<br>
<div class="txt" align="left">
<p>Уважаемые представители агентств и частные лица!</p>
<p>Для получения доступа на Вашу личную страницу, для осуществления контроля прохождения Ваших заявок и возможности самостоятельного изменения своих данных необходимо зарегистрироваться. Регистрацию можно пройти в следующем разделе:</p>
<span class="ag"><a href="/reg.shtml?status=2">&laquo;Регистрация для агентств&raquo;</a></span><br>
<span class="pr"><b><a href="/reg.shtml?status=1">&laquo;Регистрация для частных лиц&raquo;</a></b></span>
<br>
<p>Если у Вы уже зарегистрированы в нашей системе, используйте следующую ссылку для авторизации на сайте и входа на личную страницу:</p>
<span class="ag"><a href="/personal.jsp">Вход для агентств на личную страницу</a></span><br>
<span class="pr"><a href="/personal.jsp">Вход для частных лиц на личную страницу</a></span>
</div>
<br><br>
</article>

</div>
<footer class="b-ft" id="footermain">
</footer>
<footer class="b-ft_sub" id="footersub">
</footer>
<script type="text/javascript" language="JavaScript">
$("#header").load("/v2/401-header.html");
$("#footermain").load("/v2/401-footermain.html");
$("#footersub").load("/v2/401-footersub.html");
</script>
</body>
</html>



---------- Добавлено 25.01.2016 в 23:37 ----------

Еще смотрю файл cookie.txt пустой, думаю это не правильно, хотя путь указан верный

---------- Добавлено 25.01.2016 в 23:58 ----------

Хотя во втором запросе в cookie.txt появляется значение Z

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий