[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: cURL и post
Frost-56
Всем привет.
Проблема в следующем:
делаю авторизацию на сайте kriminala.net и использую след. код.

<?PHP 
$ch = curl_init('http://forum.kriminala.net/login.php');
# /loginout.php HTTP/1.1
curl_setopt($ch, CURLOPT_POST, 1);
# POST /forum/..
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (бла бла бла..) ");
# User-Agent
$headers = array
(
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*;q=0.8',
'Accept-Language: ru,en-us;q=0.7,en;q=0.3',
'Accept-Encoding: deflate',
'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7'
);
curl_setopt($ch, CURLOPT_HTTPHEADER,$headers);
# добавляем заголовков к нашему запросу. Чтоб смахивало на настоящих
curl_setopt($ch, CURLOPT_REFERER, "http://forum.kriminala.net/login.php");
# Подделываем значение - откуда пришли данные.
curl_setopt($ch, CURLOPT_POSTFIELDS, 'action=username=логин&password=пароль&submit=login');
# post данные.
# умная libcurl сама добавит заголовки
# Content-Type: application/x-www-form-urlencoded и Content-Length: 71

curl_setopt($ch, CURLOPT_COOKIEJAR, "my_cookies.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, "my_cookies.txt");
# Функции для обработки установливаемых форумом кук.
# подробнее рассмотрим далее.

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
# Убираем вывод данных в браузер. Пусть функция их возвращает а не выводит
$result = curl_exec($ch); // выполняем запрос curl
curl_close($ch);
?>



В файле с куками my_cookies.txt появляется след. информация:


# Netscape HTTP Cookie File
# http://curl.haxx.se/rfc/cookie_spec.html
# This file was generated by libcurl! Edit at your own risk.

.kriminala.net TRUE / FALSE 1356780745 phpbb2mysql_data a%3A2%3A%7Bs%3A11%3A%22autologinid%22%3Bs%3A0%3A%22%22%3Bs%3A6%3A%22userid%22%3Bi%3A-1%3B%7D
.kriminala.net TRUE / FALSE 1356780745 phpbb2mysql_sid 06b5418a3ad62fdc7a9c907acd63787d



Не знаю проходит авторизация или нет.
А во втором файле я сделал чтобы показывало форму для ввода лично сообщения:

<?php 
$url = "http://forum.kriminala.net/privmsg.php";
$ch = curl_init();
curl_setopt($ch, CURLOPT_COOKIEFILE, '/my_cookies.txt');
curl_setopt($ch, CURLOPT_URL,$url); // set url to post to
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);// allow redirects
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // return into a variable
curl_setopt($ch, CURLOPT_TIMEOUT, 3); // times out after 4s
curl_setopt($ch, CURLOPT_POST, 1); // set POST method
curl_setopt($ch, CURLOPT_POSTFIELDS, "folder=inbox&mode=post&u=45048"); // add POST fields
$result = curl_exec($ch); // run the whole process
curl_close($ch);
echo $result;
?>



Но место форм для ввода сообщений, у меня вылазит окно авторизации.
В чем проблема, подскажите плиз.
Заранее благодарен за Ваши ответы.



Спустя 1 час, 48 минут, 31 секунда (30.12.2011 - 16:43) Winston написал(а):
Цитата (Frost-56 @ 30.12.2011 - 13:54)
Но место форм для ввода сообщений, у меня вылазит окно авторизации.

Значит авторизация не проходит.
Эту тему смотрел ?

Спустя 2 дня, 6 часов, 2 минуты, 44 секунды (2.01.2012 - 22:45) Frost-56 написал(а):
Спасибо, перечитал вашу тему. Вот мой код авторизации:

<?php
$url = 'http://forum.kriminala.net/login.php'; // URL сайта на котором будем авторизоваться
$urlTo = 'http://forum.kriminala.net/login.php'; // URL на которой будем слать POST данные
$post = username=логин&password=пасс&redirect=&login=%C2%F5%EE%E4;

$ch = curl_init(); // Инициализируем сеанс CURL
curl_setopt($ch, CURLOPT_URL, $url); // Заходим на сайт
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Делаем так, чтобы страница не выдавалась сразу в поток, а можно было ее записать в переменную
$html = curl_exec($ch); // Имитируем заход на сайт

curl_setopt($ch, CURLOPT_URL, $urlTo); // Устанавливаем адрес куда будем слать POST данные
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); // Записываем cookies в файл, чтобы потом можно было их считать
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); // Теперь читаем cookies с файла
curl_setopt($ch, CURLOPT_POST, true); // Говорим, что информация будет отправляться методом POST
curl_setopt($ch, CURLOPT_POSTFIELDS, $post); // Передаем POST данные
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Иногда бывает, что после отправки данных происходит редирект heaer('Location:...').
// Этот параметр говорит о то, чтобы мы следовали за ними, а не оставались на месте после отправки данных


$html = curl_exec($ch); // Записываем пришедшие данные в переменную
curl_close($ch); // Закрываем сеанс работы CURL
echo $html; // И вуаля :) Выводим авторизованную страницу
?>


Но сервер выкидывает следующее:

Ошибка HTTP 500 (Internal Server Error): При попытке сервера выполнить запрос возникла неожиданная ситуация.

Спустя 4 минуты, 19 секунд (2.01.2012 - 22:50) Winston написал(а):
Цитата (Frost-56 @ 2.01.2012 - 21:45)
$post = username=логин&password=пасс&redirect=&login=%C2%F5%EE%E4;

А чего строку не взял в кавычки?
Или это сюда без кавычек выложил ?



Спустя 26 минут, 49 секунд Winston написал(а):
Также, если у тебя логин написан по-русски то его нужно кодировать
$post = 'username='.urlencode('логин').'&password=пасс&redirect=&login='.urlencode('логин');

Спустя 1 час, 24 минуты, 53 секунды (3.01.2012 - 00:15) Frost-56 написал(а):
Цитата (Winston @ 2.01.2012 - 19:50)
Цитата (Frost-56 @ 2.01.2012 - 21:45)
$post = username=логин&password=пасс&redirect=&login=%C2%F5%EE%E4;

А чего строку не взял в кавычки?
Или это сюда без кавычек выложил ?



Спустя 26 минут, 49 секунд Winston написал(а):
Также, если у тебя логин написан по-русски то его нужно кодировать
$post = 'username='.urlencode('логин').'&password=пасс&redirect=&login='.urlencode('логин');


Там на англ. ник, это я сюда выложил чтобы никто не взломал.
А строка реально без кавычек, реально что то затупил, след. раз буду не копировать а писать сам, спасибо вам большое )

Цитата (Frost-56 @ 2.01.2012 - 21:45)
$post = username=логин&password=пасс&redirect=&login=%C2%F5%EE%E4;

А чего строку не взял в кавычки?
Или это сюда без кавычек выложил ?



Спустя 26 минут, 49 секунд Winston написал(а):
Также, если у тебя логин написан по-русски то его нужно кодировать
$post = 'username='.urlencode('логин').'&password=пасс&redirect=&login='.urlencode('логин');


Там на англ. ник, это я сюда выложил чтобы никто не взломал.
А строка реально без кавычек, реально что то затупил, след. раз буду не копировать а писать сам, спасибо вам большое )

Спустя 2 минуты, 2 секунды (3.01.2012 - 00:17) Winston написал(а):
Цитата (Frost-56 @ 2.01.2012 - 23:15)
спасибо вам большое

Проблема решена ?

Спустя 10 часов, 22 минуты, 4 секунды (3.01.2012 - 10:39) Frost-56 написал(а):
Цитата
Проблема решена ?


Да, полностью, ещё раз спасибо. Будет 10 постов поставлю + )
Быстрый ответ:

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