2010-10-05 8 views
1

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

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

Любое обходное решение этого?

ответ

2

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


$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 

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

--- explian для внизу ----

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


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

Что делает следующий код: - инициализировать «экземпляр завитка» (чтобы он был простым) (3-я строка) - 4-я и 5-я строки: сохранить файлы cookie в файл. Curl работает так же, как браузер, поэтому, когда вы входите на страницу со скручиванием, он сохраняет файлы cookie с данными аутентификации в памяти. Я говорю это, чтобы сохранить его в файле, так что во второй раз, когда я запустил скрипт, у него будут одинаковые куки-файлы, и он не будет нуждаться в повторной аутентификации. Или вы можете иметь несколько сценариев, используя один и тот же файл cookie, и только один для входа в систему, который вы запускаете каждые 24 часа или когда вы выходите из системы ... - другие настройки: * followlocation - когда curl получает перенаправление http, он должен вернуться на страницу был перенаправлен, а не код редиректа * UserAgent - завиток представляет себя как светлячок * таймаут - сколько времени он должен ждать, пока соединение будет установлено, 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

Thanx для ответа, но можете ли вы объяснить им? Что именно вы делаете, используя файл cookie.jar? И я думаю, что вы используете фреймворк для второго скрипта. Не так ли? –

+0

Объяснил некоторую информацию в первом посте, добавил простой в использовании класс. Если у вас есть еще вопросы, не стесняйтесь спрашивать. Обычно помогает каждый раз, когда вы захватываете файл, чтобы сохранить его на жесткий диск в формате txt и посмотреть, какой ответ вы получаете. –

+0

Большое спасибо за объяснение. Попробую это сразу. :) –

0

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

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

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

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

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

Смежные вопросы