PDA

Просмотр полной версии : Не отправляется POST запрос на Livejournal


rainboww
12.02.2010, 17:33
Авторизация удается, но дальше при редактировании профиля форма не отсылается. Пробовал заполнять поля и строкой и массивом.

<?php

$curl = curl_init();
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.4) Gecko/2008102920 AdCentriaIM/1.7 Firefox/3.0.4");
curl_setopt($curl, CURLOPT_URL, 'http://www.livejournal.com/login.bml');
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, 'user=0captain_memo&password=201826');
curl_setopt($curl, CURLOPT_REFERER, 'http://www.livejournal.com');
curl_setopt($curl, CURLOPT_COOKIEJAR, "./cook1");
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);


$data = array('name' => '0captain_memo',
'gender' => 'M',
'month' => '6',
'day' => '02',
'year' => '1988',
'opt_sharebday' => 'A',
'opt_showbday' => 'D',
'opt_showschools' => 'F',
'interests' => 'music',
'bio' => '',
'url' => 'http://google.com',
'urlname' => 'google.com',
'opt_showlocation' => 'Y',
'Widget%5BLocation%5D_country' => 'RU',
'Widget%5BLocation%5D_statedrop' => '58',
'Widget%5BLocation%5D_stateother' => '',
'Widget%5BLocation%5D_city' => '',
'Widget%5BLocation%5D_minimal_display' => '0',
'allow_contactshow' => 'Y',
'opt_whatemailshow' => 'N',
'LJ__Setting__FindByEmail_opt_findbyemail' => 'H',
'LJ__Setting__UserMessaging_opt_usermsg' => 'Y',
'opt_showonlinestatus' => 'F',
'aolim' => '',
'icq' =>'' ,
'yahoo' => '',
'msn' => '',
'jabber' => '' ,
'google_talk' => '',
'skype' => '',
'gizmo' =>'' ,
'last_fm_user' => '',
'txtmsg_security' => 'N',
'txtmsg_provider' => '',
'txtmsg_number' => '',
'opt_hidefriendofs' => 'on',
'opt_disable_vgifts' => 'none',
'lj_form_auth => '.$lj_form_auth[1]);


$data2 = 'lj_form_auth='.$lj_form_auth[1].'&name=cap007&gender=M&month=6&day=02&year=1978&opt_sharebday=A&opt_showbday=D&opt_showschools=F&interests=music&bio=&url=http://google.com&urlname=google.com&opt_showlocation=Y&Widget%5BLocation%5D_country=RU&Widget%5BLocation%5D_statedrop=58&Widget%5BLocation%5D_stateother=&Widget%5BLocation%5D_city=&Widget%5BLocation%5D_minimal_display=0&allow_contactshow=Y&opt_whatemailshow=N&LJ__Setting__FindByEmail_opt_findbyemail=H&LJ__Setting__UserMessaging_opt_usermsg=Y&opt_showonlinestatus=F&aolim=&icq=&yahoo=&msn=&jabber=&google_talk=&skype=&gizmo=&last_fm_user=&txtmsg_security=N&txtmsg_provider=&txtmsg_number=&opt_hidefriendofs=on&opt_disable_vgifts=none';

curl_setopt($curl, CURLOPT_REFERER, 'http://www.livejournal.com/');
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_URL, 'http://www.livejournal.com/manage/profile');

$result= curl_exec($curl);
echo $result;
curl_close ($curl);

?>

Помогите найти ошибку

groundhog
12.02.2010, 17:41
А что в результате возвращается?

rainboww
12.02.2010, 17:59
Возвращается страница редактирования профиля под моим логином и все! Ни сообщения об ошибке в заполнении формы, ни соотв сообщения об успехе - просто форма с полями. Но в жж эту страницу может видеть только уже авторизированный юзер, так што типа половину пути правильно прошли

Komyak
12.02.2010, 20:40
Держи полностью готовая функция авторизации:

function login( $login, $password )
{
$result = post( 'http://www.livejournal.com/login.bml', null, 'http://www.livejournal.com/' );
preg_match( '#th" value="(.*?)"#i', $result, $lj_form_auth );
preg_match( '#l\' value=\'(.*?)\'#i', $result, $chal );
$result = post( 'http://www.livejournal.com/login.bml?ret=1', 'lj_form_auth=' . urlencode( $lj_form_auth[1] ) . '&chal=' . urlencode( $chal[1] ) . '&response=' . MD5( $chal[1] . MD5( $password ) ) . '&user=' . $login . '&password=' . $password . '&remember_me=1&action%3Alogin=%D0%92%D1%85%D0%BE%D0%B4+%D0%B2+%D1 %81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%83...', 'http://www.livejournal.com/login.bml' );

if ( preg_match( '#logout(.*?)form#i', $result ) ) {
return true;
} else {
return false;
}
}

1/ $post - пиши в строку;
2/ urlencode( $lj_form_auth[1] );
3/urlencode( $chal[1] );
и т.д.
Странно, если это весь код, то как он у тебя вообще авторизуется? Там параметры для авторизации формируются ява скриптом в начале страницы(Я намучился когда писал цикл для "добавления друзей")

rainboww
13.02.2010, 03:27
Спасибо, но зачем так сложно? Авторизироваться вполне можно и так:
<?php

$curl = curl_init();
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.4) Gecko/2008102920 AdCentriaIM/1.7 Firefox/3.0.4");
curl_setopt($curl, CURLOPT_URL, 'http://www.livejournal.com/login.bml');
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, 'user=0captain_memo&password=201826');
curl_setopt($curl, CURLOPT_REFERER, 'http://www.livejournal.com');
curl_setopt($curl, CURLOPT_COOKIEJAR, "./cook1");
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

$result= curl_exec($curl);
echo $result;
curl_close ($curl);

?>


Вопрос то в другом: как дальше пройти на страницу http://www.livejournal.com/manage/profile

и отредактировать профиль ?

Komyak
14.02.2010, 12:22
Вопрос то в другом: как дальше пройти на страницу
Так тебе и дали готовую функцию. В дальнейшем там любое действие требует получения этих параметров. Меняй урлы в этой функции под свои нужды.
Это $lj_form_auth- нужно везде.
Я сначала тоже не мог ничего изменить...
Авторизироваться вполне можно и так:
Какой размер кода получится в итоге? Авторизация->Переход->Получение параметров->Отправка->....

rainboww
27.02.2010, 16:36
Спасибо помогло

Jed7777
27.02.2010, 16:58
В той функции тебе надо было подгружать куки с авторизации.
curl_setopt($ch, CURLOPT_COOKIEFILE, $user_cookie_file);
curl_setopt($ch, CURLOPT_COOKIEJAR, $user_cookie_file);