Это то, что у меня обычно работает
$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 и других опций, с которыми я обычно сталкиваюсь. Я надеюсь, что приведенные выше примеры будут полезны для вас. Удачи.