Получить phpBB удаленный сеанс - PullRequest
1 голос
/ 05 октября 2010

Я хочу вытащить некоторые данные из форума phpBB, членом которого я являюсь.Но для этого требуется логин.Я могу войти, используя cURL, но если я пытаюсь сканировать данные после входа в систему, используя cURL, это все равно показывает, что мне нужно войти в систему, прежде чем просматривать эту страницу.Можно ли войти в систему с помощью cURL и сохранить этот сеанс, чтобы выполнить какую-то дальнейшую работу?

Другое дело, что форум обычно показывает страницу подтверждения после входа в систему и затем через 5 секунд автоматически перенаправляет на страницу индекса.И дело в том, что если я войду в систему с помощью cURL, мой скрипт также будет следовать расположению этого заголовка и покажет мне эту страницу.

Есть ли обходной путь?

Ответы [ 2 ]

2 голосов
/ 05 октября 2010

Это то, что у меня обычно работает


$timeout=5;
$file='cookies.jar';
$this->handle=curl_init('');
curl_setopt($this->handle, CURLOPT_COOKIEFILE,  $file);
curl_setopt($this->handle, CURLOPT_COOKIEJAR,   $file);
curl_setopt($this->handle, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($this->handle, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($this->handle, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($this->handle, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($this->handle, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6 (.NET CLR 3.5.30729)");
curl_setopt($this->handle, CURLOPT_TIMEOUT, round($timeout,0));
curl_setopt($this->handle, CURLOPT_CONNECTTIMEOUT, round($timeout,0));

и я обычно использую это так


$now=grab_first_page();
if(not_logged_in($now)) {
   send_login_info();
}
if(not_logged_in()) { end_of_script_with_error(); }
// rest of script

Таким образом файлы cookie сохраняются между сеансами, и сценарию не нужно входить в систему каждый раз, когда он что-то делает.

--- explian для ниже ----

Я использую объект, но вы можете заменить дескриптор $ this-> простой переменной с именем $ mycurl, строки будут выглядеть как


$mycurl=curl_init(''
curl_setopt($mycurl, CURLOPT_COOKIEFILE, $file)

Что делает код ниже: - инициализировать «экземпляр завитка» (для простоты) (3-я строка) - 4-я и 5-я строки: сохранить куки в файл. Curl работает так же, как браузер, поэтому при входе на страницу с curl он сохраняет куки с данными аутентификации в памяти. Я говорю об этом, чтобы сохранить его в файл, чтобы при втором запуске скрипта у него были те же файлы cookie и больше не требовалась аутентификация. Или вы можете иметь несколько сценариев, использующих один и тот же файл cookie, и только один для входа в систему, который вы запускаете каждые 24 часа или всякий раз, когда вы выходите из системы ... - другие настройки: * followlocation - когда curl получает перенаправление http, он должен вернуть страницу, на которую он был перенаправлен, а не код перенаправления * useragent - curl представляет себя как firefox * timeout - сколько времени ждать установления соединения, обычно 5 или 10 более чем достаточно

Я поставил простой класс, который я здесь использую http://pastebin.com/Rfpc103X

Вы можете использовать это так



// -- initialize curl
$ec=new easyCurl;

// -- set some options
//if the file you are in right now is named file_a.php it will create a file_a.jar cookie file
$ec->start(str_replace('.php','.jar',__FILE__));
$ec->headersPrepare(false);
$ec->prepareTimeOut(20);

$url='http://www.google.com/';

// --- set url
$ec->curlPrepare($url);

// --- get the actual data
$page=$ec->grab();

echo $page;

// to send GET data
$get_data=array('id'=>10);
$ec->curlPrepare($url,$get_data);

// and to post data
$post_data=array('user'=>'blue','password'=>'black');
$ec->curlPrepare($url,array(),$post_data);

Он автоматически обрабатывает настройки POST / GET и других опций, с которыми я обычно сталкиваюсь. Я надеюсь, что приведенные выше примеры будут полезны для вас. Удачи.

0 голосов
/ 05 октября 2010

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

curl --cookie-jar cjar -d "somelogindata" http://example.com/phpbb/login.php

Это создает cjar файл cookie-файла, который вы затем можете использовать в последующих запросах:

curl --cookie-jar cjar --cookie cjar http://example.com/phpbb/viewforum.php?foobar

Параметр --cookie-jar указывает файл, в котором сохраняются файлы cookie; чтобы использовать их, вы используете опцию --cookie. Для обновления файлов cookie вы также должны всегда указывать параметр --cookie-jar.

...