Это то, что обычно работает для меня
$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 и другой опции, с которыми я обычно сталкиваюсь. Я надеюсь, что приведенные выше примеры будут полезны для вас. Удачи.
Thanx для ответа, но можете ли вы объяснить им? Что именно вы делаете, используя файл cookie.jar? И я думаю, что вы используете фреймворк для второго скрипта. Не так ли? –
Объяснил некоторую информацию в первом посте, добавил простой в использовании класс. Если у вас есть еще вопросы, не стесняйтесь спрашивать. Обычно помогает каждый раз, когда вы захватываете файл, чтобы сохранить его на жесткий диск в формате txt и посмотреть, какой ответ вы получаете. –
Большое спасибо за объяснение. Попробую это сразу. :) –