Curl

vital

Больной Компом Детектед
29.01.2006
2 432
33
#1
Сабж. Собственно готовый для копипасты код, с помощью которого можно залогинится на большинство ресурсов.
PHP:
<?php $ch = curl_init("то_где_нас_логинят");

curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_NOBODY, 1);
curl_setopt($ch, CURLOPT_USERAGENT, 'User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Widows NT)');
curl_setopt($ch, CURLOPT_REFERER, 'откуда_мы_типа_пришли');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_COOKIESESSION, TRUE);

curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'user_email=aa%40aa.aa&user_password=112233&redirect=%2F&submitted=1&ajax=false'); //Параметры которые передаются. У каждого свои.
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$req = curl_exec($ch);
$headers = explode("\n", $req); // Делаем массив из заголовоков ответа

curl_setopt($ch,CURLOPT_URL,'то_куда_надо_зайти);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_NOBODY, 0);
curl_setopt($ch, CURLOPT_POST, 0);

$cookie = array();
for ($i = 0; $i < count($headers); $i++) { //По всем его элементам
if (strpos($headers[$i], 'Set-Cookie:') !== FALSE) { // Если у тек-й элемент - это заголовок печенек
$c = explode('; ', substr($headers[$i], strlen('Set-Cookie:'))); // Обрезаем строку сет-куки и разбиваем в массив, разделитель не пробел, а "; " потому что в строке кук Expires тоже есть пробелы. И получается кривое разбиение.
foreach ($c as $k=>$v) // По всем элементам получившегося массива
{
if (!empty($v) && ( // Если текущий элемент не пустой, и не один их не нужных заголовков, то добавляем его в массив с куками
!strstr($v, 'source') &&
!strstr($v, 'path') &&
!strstr($v, 'domain') &&
!strstr($v, 'expires'))) $cookie[]=$v;
}

}
}
curl_setopt($ch, CURLOPT_COOKIE, implode(';',$cookie)); // Из массива снова делаем строку..
$html=curl_exec($ch); //Тут мы залогинены.
curl_close($ch);?>