[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Ошибка курла
N0ob
Всем привет. Делал авторизацию на маил ру по уроки винстона. Выдает ошибку:
Цитата
Warning: curl_setopt(): CURLOPT_FOLLOWLOCATION cannot be activated when an open_basedir is set in /home/u564445659/public_html/test.php on line 23

Перерыл весь нет, ничего не нашел про исправление этой ошибки(вразумительного), о один паренек написал:
Цитата
Все! Уже разобрался! Правда пришлось перечитать немало информации о протоколе HTTP, но зато вот написал сам свою функцию, которая при обнаружении кодов 301 и 302 в стартовой строке сама следует по URI, указанных в заголовках Location. и теперь все прекрасно работает без всяких FOLLOWLOCATION.
Вопрос можно считать закрытым.

Как это сделать?
Winston
1)Либо отключить open_basedir - если есть возможность
2)Если нету возможности, то вместо CURLOPT_FOLLOWLOCATION использовать функцию которая эмулирует редиректы, например эта, либо если она не заработает, попробуй другие ф-и которые это делают. На той странице, которую я указал в ссылке, есть достаточно решений.

PS: И вообще, у mail.ru есть свое API, посмотри, возможно там уже есть то, что тебе нужно.
N0ob
Winston функция которую ты дал подошла. ВОт только почему то у меня не авторизовывается на майле. Ввожу правильный логин и пароль, выводит мне просто страницу майла
Winston
Цитата (N0ob @ 29.01.2014 - 16:39)
Ввожу правильный логин и пароль, выводит мне просто страницу майла

Видимо ты что-то упустил и твой код не эмулирует поведение пользователя, либо делает это криво, потому и не происходит авторизация.
N0ob
[b]Winston[/b вроде бы все правильно:
<?php

$login = $_POST['login'];
$pass = $_POST['pass'];

function curl_exec_follow($ch, &$maxredirect = null) {

// we emulate a browser here since some websites detect
// us as a bot and don't let us do our job

$user_agent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5)".
" Gecko/20041107 Firefox/1.0";
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent );

$mr = $maxredirect === null ? 5 : intval($maxredirect);

if (ini_get('open_basedir') == '' && ini_get('safe_mode') == 'Off') {

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $mr > 0);
curl_setopt($ch, CURLOPT_MAXREDIRS, $mr);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

} else {

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);

if ($mr > 0)
{
$original_url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
$newurl = $original_url;

$rch = curl_copy_handle($ch);

curl_setopt($rch, CURLOPT_HEADER, true);
curl_setopt($rch, CURLOPT_NOBODY, true);
curl_setopt($rch, CURLOPT_FORBID_REUSE, false);
do
{
curl_setopt($rch, CURLOPT_URL, $newurl);
$header = curl_exec($rch);
if (curl_errno($rch)) {
$code = 0;
} else {
$code = curl_getinfo($rch, CURLINFO_HTTP_CODE);
if ($code == 301 || $code == 302) {
preg_match('/Location:(.*?)\n/', $header, $matches);
$newurl = trim(array_pop($matches));

// if no scheme is present then the new url is a
// relative path and thus needs some extra care

if(!preg_match("/^https?:/i", $newurl)){
$newurl = $original_url . $newurl;
}
}
else {
$code = 0;
}
}
}
while ($code && --$mr);

curl_close($rch);

if (!$mr)
{
if ($maxredirect === null)
trigger_error('Too many redirects.', E_USER_WARNING);
else
$maxredirect = 0;

return false;
}
curl_setopt($ch, CURLOPT_URL, $newurl);
}
}

return curl_exec($ch);
}


$url = 'http://mail.ru'; // Куда зайти
$urlTo = 'http://auth.mail.ru/cgi-bin/auth'; // Куда данные послать
$domain = 'mail.ru'; // Домен
$post = 'Login=' . $login . '&Domain=' . $domain . '&Password=' . $pass; // POST данные

$ch = curl_init(); // Инициализация сеанса
curl_setopt($ch, CURLOPT_URL, $url); // Заходим на сайт
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Приказываем вернуть страницу в переменную

$html = curl_exec($ch); // Забираем страницу

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_URL, $urlTo); // Куда шлем POST данные
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); // Записываем cookie
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); // Читаем cookies
curl_setopt($ch, CURLOPT_POST, true); // Указываем метод отправки
curl_setopt($ch, CURLOPT_POSTFIELDS, $post); // POST данные
curl_exec_follow($ch);
$html = curl_exec($ch); // Забираем страницу
curl_close($ch); // Завершаем сеанс
echo $html; // Оказываемся в вашем ящике
Быстрый ответ:

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