[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: curl авторизация на dle
Боря
Доброго времени суток Ув. форумчане!
Постараюсь попонятней описать свою проблему. Есть у меня сайт на движке dle. Загорелся я написать скрипт который будет добавлять новости на сайт. Ну есть у меня файл с новостями(100 шт.) хочу чтоб не ручками добавлять а сразу все добавить. Опыт программирования на php - 3 месяца. Для начала думал просто попробовать написать скрипт который будет авторизовываться в админке. Беру лису, ловлю заголовки, собственно вот они

POST /admin.php? HTTP/1.1
Host: site.ru
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Referer:
http://site.ru/admin.php?
Cookie: PHPSESSID=0c18570fb756f5590d89d1f77bd34aa2
Content-Type: application/x-www-form-urlencoded
Content-Length: 50
subaction=dologin&username=admin&password=pass


Ага все ясно! вот скрипт.

<?
function
post_content($url,$postdata)
{
$uagent = "Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0";
$ch = curl_init( $url );
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_ENCODING, "");
curl_setopt($ch, CURLOPT_USERAGENT, $uagent);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($ch, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT'].'/cookies.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE,$_SERVER['DOCUMENT_ROOT'].'/cookies.txt');
$content = curl_exec( $ch );
return $content;
}

//тут ф-ция которая скачивает http://site.ru/admin.php? и выдирает из заголовка PHPSESSID в переменную $session

//формирую post данные

$postdata = array(
'Host'=>'site.ru',
'User-Agent'=>'Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0',
'Accept'=>'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language'=>'ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3',
'Accept-Encoding'=>'gzip, deflate',
'Accept-Charset'=>'windows-1251,utf-8;q=0.7,*;q=0.7',
'Connection'=>'keep-alive',
'Referer'=>'http://site.ru/admin.php?',
'Cookie'=>'PHPSESSID='.$session, //подставляю PHPSESSID
'Content-Type'=>'application/x-www-form-urlencoded',
'Content-Length'=>'50',
'subaction'=>'dologin',
'username'=>'admin',
'password'=>'pass');

$url = 'http://site.ru/admin.php?';

echo post_content($url,$postdata);

?>


Как же я удивился что он не работает!!! Я пробовал и так и сяк. Убирал строчки которые отвечают за COOKIE, убирал все лишнее из POST,писал данные одной строкой. Вот так

subaction=dologin&username=admin&password=pass


Добавлял в POST - PHPSESSID='.$session, десять раз проверил логин и пароль! и нифига!
Короче я разочарован ппц. Надеюсь на Вашу помощь. Может и ошибка пустяковая но я уже своим мутным взглядом невижу её!








Спустя 13 минут, 14 секунд (10.08.2011 - 00:33) Invis1ble написал(а):
Цитата
'Host'=>'site.ru',
'User-Agent'=>'Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0',
'Accept'=>'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language'=>'ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3',
'Accept-Encoding'=>'gzip, deflate',
'Accept-Charset'=>'windows-1251,utf-8;q=0.7,*;q=0.7',
'Connection'=>'keep-alive',
'Referer'=>'http://site.ru/admin.php?',
'Cookie'=>'PHPSESSID='.$session, //подставляю PHPSESSID
'Content-Type'=>'application/x-www-form-urlencoded',
'Content-Length'=>'50',

это не пост-данные, а заголовки. Не нужно их пихать в CURLOPT_POSTFIELDS. А вот это
Цитата
'subaction'=>'dologin',
'username'=>'admin',
'password'=>'pass'

надо. причем в виде
Цитата
subaction=dologin&username=admin&password=pass

После того, как исправишь - смотри заголовки ответа сервера и показывай код

Спустя 15 минут, 53 секунды (10.08.2011 - 00:49) Боря написал(а):
Не работает(((

вот что прислал сервер

HTTP/1.1 200 OK
Date: Tue, 09 Aug 2011 21:40:24 GMT
Server: Apache/2.2.16 (Unix) mod_ssl/2.2.16 OpenSSL/0.9.8e-fips-rhel5 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635
X-Powered-By: PHP/5.2.14
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: dle_user_id=deleted; expires=Mon, 09-Aug-2010 21:40:23 GMT; path=/; domain=.site.ru; httponly
Set-Cookie: dle_name=deleted; expires=Mon, 09-Aug-2010 21:40:23 GMT; path=/; domain=.site.ru; httponly
Set-Cookie: dle_password=deleted; expires=Mon, 09-Aug-2010 21:40:23 GMT; path=/; domain=.site.ru; httponly
Set-Cookie: dle_hash=deleted; expires=Mon, 09-Aug-2010 21:40:23 GMT; path=/; domain=.site.ru; httponly
Last-Modified: Tue, 09 Aug 2011 21:40:24 GMT
Transfer-Encoding: chunked
Content-Type: text/html



вот скрипт

<?
function
post_content($url,$postdata)
{
$uagent = "Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0";
$ch = curl_init( $url );
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_ENCODING, "");
curl_setopt($ch, CURLOPT_USERAGENT, $uagent);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($ch, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT'].'/cookies.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE,$_SERVER['DOCUMENT_ROOT'].'/cookies.txt');
$content = curl_exec( $ch );
return $content;
}



//формирую post данные
$postdata = 'subaction=dologin&username=admin&password=pass';


$url = 'http://site.ru/admin.php?';

echo post_content($url,$postdata);

?>


Только я непойму как тогда отослать заголовки на сервер? Браузер их же как то отсылает.

Спустя 8 часов, 55 минут, 18 секунд (10.08.2011 - 09:44) olegod написал(а):
Заголовки curl отсылает сам, отдельно отсылать их надо только если использовать сокеты.
$postdata = array('username'=>'user',
'subaction'=>'dologin',
'selected_language'=>'Russian',
'password'=>'pass');

Формат записи не имеет значения, можно писать всё в готовом виде, или массивом. Вы просто забыли поле selected_language, где указывается язык.

Спустя 1 час, 3 минуты, 58 секунд (10.08.2011 - 10:48) fire написал(а):
Если цель добавление новостей на свой сайт то непонятно зачем эти извращения с курлом) Почему бы просто не сгенерировать дамп бд с новостями и потом уже залить его ? Кстати, видел под дле плагин xmlrpc, можно как и в вордпресе добавлять новости удаленно через апи, либо написать свой плагин для таких целей smile.gif

Спустя 3 часа, 25 минут, 6 секунд (10.08.2011 - 14:13) Боря написал(а):
Сам думал сгенерировать дамп. Но в новостях в основном картинки которые при наведении увеличиваються. Для каждой кртинки нужно указывать ширину и высоту (а она у всех картинок разная). Ну я посчитал что это очень геморно. Но ошибся. Походу лучше генерировать дамп.

Спустя 55 минут, 11 секунд (10.08.2011 - 15:08) Боря написал(а):
Ха! Заработало!

<?php
function
post($url,$post)
{
$ch = curl_init($url);
curl_setopt($ch, 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($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_REFERER, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
return $result;
}

$page = post('http://site.ru/admin.php','subaction=dologin&username=admin&password=pass');

echo $page;

?>



Спустя 1 день, 23 часа, 49 минут, 24 секунды (12.08.2011 - 14:58) alexbel2404 написал(а):
пиши сразу в базу) таблица dle_post, там ничего сложного smile.gif и не надо морочить голову с авторизацией
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.