Извиняйте за нубовские темы, но очень странно все, вот я написал скриптик который зайдет на адрес, авторизуется и отправит Post Запрос. PHP: ini_set('display_errors', 1); function post_content ($url,$postdata) { $uagent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"; $ch = curl_init( $url ); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_ENCODING, ""); curl_setopt($ch, CURLOPT_USERAGENT, $uagent); // useragent curl_setopt($ch, CURLOPT_TIMEOUT, 120); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata); $content = curl_exec( $ch ); $err = curl_errno( $ch ); $errmsg = curl_error( $ch ); $header = curl_getinfo( $ch ); curl_close( $ch ); $header['errno'] = $err; $header['errmsg'] = $errmsg; $header['content'] = $content; return $header; } //Авторизовываемся $url = 'http://qchat.su:2222'; $username = 'DVMade'; $userpass = '******'; $ip = '/'.$_SERVER['SERVER_ADDR']; $postdata = 'page=login&ip='.$ip.'&name='.$username.'&password='.$userpass; $result = post_content( $url, $postdata ); $html = $result['content']; //Вытаскиваем сессию $count=preg_match_all('#<a href="(.+?)"><span>(.+?)</span></a>#i', $html, $matches); $href = htmlspecialchars($matches[1][2]); $session=substr($href,11,10); ############Настройки сервиса############### $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://qchat.su:2222/?page=DB_propss_in&ns=testchat&us=null&uid=root_$session&db.host=localhost:3306&db.user=root&db.pass=715246&db.dbname=testchat&billing.on.off=true&billing.days=30&billing.days.minus=1&billing.id.system=1&billing.message=123&money.Informer.time=10&billing.days.mess=3&billing.days.off=0"); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)'); $data = curl_exec($ch); curl_close($ch); Теперь сама проблема, после отправки второго Post запроса на сайте возникает ошибка и нифига ничего не работает, такое ощущение что не верно отправлен запрос, и мнно в этом и причина. Теперь сабж. Страница на которой находится form имеет такой адрес Code: http://qchat.su:2222/?uid=root_$session&page=DB_props&ns=testchat А в POST запросе который отправляется с этой страницы передается немного другое! Может я не верно составил что-то. Посмотрите пожалуйста Вот код формы: Code: <FORM METHOD=POST ACTION="/"> <INPUT TYPE=hidden NAME="page" VALUE="DB_propss_in"> <INPUT TYPE=hidden NAME="ns" VALUE="testchat"><INPUT TYPE=hidden NAME="us" VALUE="null"> <INPUT TYPE=hidden NAME="uid" VALUE="root_HYe9Bwriwf"> <INPUT TYPE=text NAME="db.host" VALUE="localhost:3306"> <INPUT TYPE=text NAME="db.user" VALUE="root"> <INPUT class="container" size="70" TYPE=text NAME="db.pass" VALUE=""> <INPUT TYPE=text NAME="db.dbname" VALUE="testchat"><INPUT TYPE=CHECKBOX NAME="billing.on.off" VALUE="true" > <INPUT TYPE=text NAME="billing.days" VALUE="30"> <INPUT TYPE=text NAME="billing.days.minus" VALUE="1"> <INPUT TYPE=text NAME="billing.id.system" VALUE="1"> <INPUT TYPE=text NAME="billing.message" VALUE="no"><INPUT TYPE=text NAME="money.Informer.time" VALUE="10"> <INPUT TYPE=text NAME="billing.days.mess" VALUE="3"> <INPUT TYPE=text NAME="billing.days.off" VALUE="0"> <INPUT TYPE=submit VALUE="Сохранить"> </FORM>
CURL и кодировки Передаю POST запрос КУРЛ PHP: ############Настройки сервиса############### //Вкладка Стандартные $firstm = $name.' успешно был запущен! По всем вопросам обращайтесь в Стол Помощи!'; $invite = 'Для регистрации в чате вам необходимо получить приглашение одного из пользователей.'; $badnicks = 'admin;админ;qchat'; $nulled = ''; $chatspeaker = '#NIK# #svadba# [#ID#]:'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://qchat.su:2222/?page=srvs_props_in&ns=$sysname&us=null&uid=root_$session&main.StartBot=true&bot.adminUIN=$admuin&Questionnaire.on.off=true&chat.name=$name&icq.status=0&icq.xstatus=0&icq.STATUS_MESSAGE1=&icq.STATUS_MESSAGE2=&auto_status.on.off=true&auto_status.time=5&icq.AUTORETRY_COUNT=5&bot.pauseIn=3000&bot.pauseOut=500&bot.msgOutLimit=20&bot.pauseRestart=660000&pervoe=true&pervo=$firstm&chat.floodCountLimit=5&chat.floodTimeLimit=10&chat.floodTimeLimitNoReg=20&chat.pauseOut=5000&chat.IgnoreOfflineMsg=true&chat.ignoreMyMessage=true&chat.TempKick=10&chat.ChangeStatusTime=60000&chat.FreeReg=true&chat.useCaptcha=true&chat.inviteDescription=$invite&chat.MaxInviteTime=24&chat.MaxMsgSize=150&chat.MaxOutMsgSize=500&chat.MaxOutMsgCount=5&chat.autoKickTime=60&chat.autoKickTimeWarn=58&chat.isAuthRequest=true&chat.badNicks=$badnicks&chat.maxNickChanged=99&chat.defaultKickTime=5&chat.maxKickTime=300&chat.maxNickLenght=10&chat.isUniqueNick=true&chat.showChangeUserStatus=true&chat.writeInMsgs=true&chat.writeAllMsgs=true&chat.NoDelContactList=true&chat.maxUserOnUin=7&chat.badSymNicks=$nulled&chat.goodSymNicks=$nulled&chat.isShowKickReason=true&chat.speaker=$chatspeaker&rezdelitel=$nulled"); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)'); $data = curl_exec($ch); curl_close($ch); На сайте появляются ошибки с кодировками, сам скрипт в кодировки UTF 8 (Без BOOM), После выполнения скрипта получаются "??? ?? ??? ??? ??? ???" Вместо данных! Сабж: Как отправить данные CURL в определенной кодировке, именно windows-1251
PHP: ############Настройки сервиса############### //Вкладка Стандартные $firstm = ' успешно был запущен! По всем вопросам обращайтесь в Стол Помощи!'; $invite = 'Для регистрации в чате вам необходимо получить приглашение одного из пользователей.'; $firstm = mb_convert_encoding($firstm,'Windows-1251','UTF-8'); $invite = mb_convert_encoding($invite,'Windows-1251','UTF-8'); $firstm = $name.$firstm ...
Весьма странно, но все равно получается трабл с кодировками. Как и писал quo я конвертирую utf-8 в windows-1251 кодом Code: $firstm = mb_convert_encoding($firstm,'Windows-1251','UTF-8'); Но ничего не получается. Ресурс на который я отправляю запрос имеет кодировку windows-1251 (Поидеи в исходном коде страницы я нашел это <meta content="text/html; charset=windows-1251" http-equiv="Content-Type" />) Как быть?
Всё наврно на сайте получаются ??? уже не знаю как быть((( ника круссский текст не хочет передоваться
Них*я уже сил нет. Вот вообщем код PHP: $main = "http://qchat.su:9090/?page=srvs_props_in&ns=$sysname&us=null&uid=root_$session&bot.adminUIN=$admuin&Questionnaire.on.off=true&chat.name=$name&icq.status=0&icq.xstatus=0&icq.STATUS_MESSAGE1=&icq.STATUS_MESSAGE2=&web.aware.on.off=true&icq.client=0&auto_status.time=5&icq.AUTORETRY_COUNT=5&bot.pauseIn=3000&bot.pauseOut=500&bot.msgOutLimit=20&bot.pauseRestart=660000&pervo=Chat+Started&chat.floodCountLimit=5&chat.floodTimeLimit=10&chat.floodTimeLimitNoReg=20&chat.pauseOut=5000&chat.IgnoreOfflineMsg=true&chat.ignoreMyMessage=true&chat.TempKick=10&chat.ChangeStatusTime=60000&chat.ChangeStatusCount=5&chat.FreeReg=true&chat.inviteDescription=$invite&chat.MaxInviteTime=24&chat.MaxMsgSize=300&chat.MaxOutMsgSize=500&chat.MaxOutMsgCount=10&chat.autoKickTime=9&chat.autoKickTimeWarn=8&chat.badNicks=$badnicks&chat.maxNickChanged=99&chat.defaultKickTime=5&chat.maxKickTime=300&chat.maxNickLenght=20&chat.showChangeUserStatus=true&chat.writeAllMsgs=true&chat.maxUserOnUin=7&chat.badSymNicks=&chat.goodSymNicks=&chat.speaker=$speaker&rezdelitel="; $main = iconv("UTF-8", "Windows-1251", $main); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "$main"); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)'); $data = curl_exec($ch); curl_close($ch);
чел помоему ты ничего не хочешь понять, а хочешь чтобы всё сделали за тебя. PHP: $main = "http://qchat.su:9090/"; $post="page=srvs_props_in&ns=$sysname&us=null&uid=root_$session&bot.adminUIN=$admuin&Questionnaire.on.off=true&chat.name=$name&icq.status=0&icq.xstatus=0&icq.STATUS_MESSAGE1=&icq.STATUS_MESSAGE2=&web.aware.on.off=true&icq.client=0&auto_status.time=5&icq.AUTORETRY_COUNT=5&bot.pauseIn=3000&bot.pauseOut=500&bot.msgOutLimit=20&bot.pauseRestart=660000&pervo=Chat+Started&chat.floodCountLimit=5&chat.floodTimeLimit=10&chat.floodTimeLimitNoReg=20&chat.pauseOut=5000&chat.IgnoreOfflineMsg=true&chat.ignoreMyMessage=true&chat.TempKick=10&chat.ChangeStatusTime=60000&chat.ChangeStatusCount=5&chat.FreeReg=true&chat.inviteDescription=$invite&chat.MaxInviteTime=24&chat.MaxMsgSize=300&chat.MaxOutMsgSize=500&chat.MaxOutMsgCount=10&chat.autoKickTime=9&chat.autoKickTimeWarn=8&chat.badNicks=$badnicks&chat.maxNickChanged=99&chat.defaultKickTime=5&chat.maxKickTime=300&chat.maxNickLenght=20&chat.showChangeUserStatus=true&chat.writeAllMsgs=true&chat.maxUserOnUin=7&chat.badSymNicks=&chat.goodSymNicks=&chat.speaker=$speaker&rezdelitel="; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "$main"); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post); $data = curl_exec($ch); curl_close($ch); echo iconv("UTF-8", "Windows-1251", $data); смотри хеадеры, кукисы скорей всего там есть а ты их не передаёшь.
1. Cookies НЕТ! 2. Кодировка странциы 100% Windows-1251 (проверял через headers) 3. Скрипт, который отправлялет POST запрос на сайт в кодирвоке UTF-8 (без BOOM) и кодировку самого скрипта менять не нужно, ибо весь сайт в кодировке такой. ВОПРОС: КАК СФОРМИРОВАТЬ CURL POST ЗАПРОС ЧТОБЫ ОН ОТПРАВИЛ ДАННЫЕ НЕ В UTF-8 КОДИРОВКЕ А В WINDOWS-1251 Я пробовал применять и iconv и другие способы перекодировки данных в windows-1251 один куй на сайте запрос с русскими символами идет вопросами!
Вообщем вот что получилось! Когда я отправляю запрос непосредственно с самого ресурса (ручками без Curl, естественным путем), наблюдаю логи, мой запрос принимает следующий вид: Code: page=srvs_props_in&ns=puperpuper&us=null&uid=root_tDXIU4KPJx&bot.adminUIN=276654&Questionnaire.on.off=true&chat.name=%D1%F3%EF%E5%F0+%CF%F3%EF%E5%F0+%D7%E0%F2&icq.status=0&icq.xstatus=0&icq.STATUS_MESSAGE1=&icq.STATUS_MESSAGE2=&web.aware.on.off=true&icq.client=0&auto_status.time=5&icq.AUTORETRY_COUNT=5&bot.pauseIn=3000&bot.pauseOut=500&bot.msgOutLimit=20&bot.pauseRestart=660000&pervo=Chat+Started&chat.floodCountLimit=5&chat.floodTimeLimit=10&chat.floodTimeLimitNoReg=20&chat.pauseOut=5000&chat.IgnoreOfflineMsg=true&chat.ignoreMyMessage=true&chat.TempKick=10&chat.ChangeStatusTime=60000&chat.ChangeStatusCount=5&chat.FreeReg=true&chat.inviteDescription=%C4%EB%FF+%F0%E5%E3%E8%F1%F2%F0%E0%F6%E8%E8+%E2+%F7%E0%F2%E5+%E2%E0%EC+%ED%E5%EE%E1%F5%EE%E4%E8%EC%EE+%EF%EE%EB%F3%F7%E8%F2%FC+%EF%F0%E8%E3%EB%E0%F8%E5%ED%E8%E5+%EE%E4%ED%EE%E3%EE+%E8%E7+%EF%EE%EB%FC%E7%EE%E2%E0%F2%E5%EB%E5%E9.&chat.MaxInviteTime=24&chat.MaxMsgSize=300&chat.MaxOutMsgSize=500&chat.MaxOutMsgCount=10&chat.autoKickTime=9&chat.autoKickTimeWarn=8&chat.badNicks=admin%3B%E0%E4%EC%E8%ED&chat.maxNickChanged=99&chat.defaultKickTime=5&chat.maxKickTime=300&chat.maxNickLenght=20&chat.showChangeUserStatus=true&chat.writeAllMsgs=true&chat.maxUserOnUin=7&chat.badSymNicks=&chat.goodSymNicks=&chat.speaker=%23NIK%23+%23svadba %23+%5B%23ID%23%5D%3A&rezdelitel= Как сделать запрос правильно? чтобы русские символы отображались именно как "%FC%E7%EE%E2%E0%F2%E5%"??? Пробовал сначала перекодировать UTF-8 в Windows-1251 затем кодировать это все в url но ничего не вышло! Что скажите?
Вот сам скрипт, имеет на данный момент такой вид: PHP: <? ini_set('display_errors', 1); function post_content ($url,$postdata) { $uagent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"; $ch = curl_init( $url ); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_ENCODING, ""); curl_setopt($ch, CURLOPT_USERAGENT, $uagent); // useragent curl_setopt($ch, CURLOPT_TIMEOUT, 120); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata); $content = curl_exec( $ch ); $err = curl_errno( $ch ); $errmsg = curl_error( $ch ); $header = curl_getinfo( $ch ); curl_close( $ch ); $header['errno'] = $err; $header['errmsg'] = $errmsg; $header['content'] = $content; return $header; } $sysname = 'puperpuper'; $name = 'Супер Пупер Пупер'; $name = urlencode(iconv("UTF-8", "windows-1251", $name)); $admuin = '276654'; //Авторизовываемся $url = 'http://qchat.su:9090'; $username = 'DVMade'; $userpass = '****'; $ip = '/'.$_SERVER['SERVER_ADDR']; $postdata = 'page=login&ip='.$ip.'&name='.$username.'&password='.$userpass; $result = post_content( $url, $postdata ); $html = $result['content']; //Вытаскиваем сессию $count=preg_match_all('#<a href="(.+?)"><img src="(.+?)"></a>#i', $html, $matches); $href = htmlspecialchars($matches[1][2]); $session=substr($href,11,10); ##########Настраиваем Сервис############ //Вкладка "Стандартные" $invite = 'Для регистрации в чате вам необходимо получить приглашение одного из пользователей.'; $invite = urlencode(iconv("UTF-8", "windows-1251", $invite)); $speaker = '#NIK# #svadba# [#ID#]:'; $badnicks = 'admin;админ'; $badnicks = urlencode(iconv("UTF-8", "windows-1251", $badnicks)); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://qchat.su:9090/?page=srvs_props_in&ns=$sysname&us=null&uid=root_$session&bot.adminUIN=$admuin&Questionnaire.on.off=true&chat.name=$name&icq.status=0&icq.xstatus=0&icq.STATUS_MESSAGE1=&icq.STATUS_MESSAGE2=&web.aware.on.off=true&icq.client=0&auto_status.time=5&icq.AUTORETRY_COUNT=5&bot.pauseIn=3000&bot.pauseOut=500&bot.msgOutLimit=20&bot.pauseRestart=660000&pervo=Chat+Started&chat.floodCountLimit=5&chat.floodTimeLimit=10&chat.floodTimeLimitNoReg=20&chat.pauseOut=5000&chat.IgnoreOfflineMsg=true&chat.ignoreMyMessage=true&chat.TempKick=10&chat.ChangeStatusTime=60000&chat.ChangeStatusCount=5&chat.FreeReg=true&chat.inviteDescription=$invite&chat.MaxInviteTime=24&chat.MaxMsgSize=300&chat.MaxOutMsgSize=500&chat.MaxOutMsgCount=10&chat.autoKickTime=9&chat.autoKickTimeWarn=8&chat.badNicks=$badnicks&chat.maxNickChanged=99&chat.defaultKickTime=5&chat.maxKickTime=300&chat.maxNickLenght=20&chat.showChangeUserStatus=true&chat.writeAllMsgs=true&chat.maxUserOnUin=7&chat.badSymNicks=&chat.goodSymNicks=&chat.speaker=$speaker&rezdelitel="); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: text/html;charset=windows-1251')); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)'); $data = curl_exec($ch); curl_close($ch); ?>
Вообщем, все верно сейчас в моём скрипте, протестил ради интереса даже со скрипта с кодировкой windows-1251 всё равно отправляются вопросы! В чем косяк может быть?
с чего ты взял что отправляются вопросы? ты выводишь свой запрос на печать? кодировки одинаковые? кодировка страницы и кодировка текста который выводишь?