полный код ... PHP: ### Заходим на сайт и получаем капчу $ch = curl_init('http://mirtesen.ru/login'); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_USERAGENT, 'Opera/9.25 (Windows NT 5.1; U; ru)'); $res = curl_exec($ch); curl_close($ch); ### Получаем код для картинки preg_match('#<img src="http://mirtesen.ru/captcha/login?(.*?)"#i', $res, $match_capt); ### Получаем куки preg_match_all('|Set-Cookie: (.*);|U', $res, $results); $cookies = implode(';', $results[1]); ### Показываем капчу echo '<img src="http://mirtesen.ru/captcha/login'.$match_capt[1].'" alt=""> <p><form name="spam" action="index.php" method="POST"> <input type="text" name="captcha"> <input type="submit" value ="Ok"></form>'; ### Отправляем обратно капчу/логин/пассворд if(isset($_POST['captcha'])){ $ch = curl_init('http://mirtesen.ru/login'); curl_setopt($ch, CURLOPT_USERAGENT, 'Opera/9.25 (Windows NT 5.1; U; ru)'); curl_setopt($ch, CURLOPT_PROXY, $proxy); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, 'auth%5Bbackurl%5D=http%3A%2F%2Fmirtesen.ru%2F&auth%5Blogin%5D=LOGIN%40mail.ru&auth%5Bpassword%5D=PASSWORD&auth%5Bcaptcha%5D='.trim($_POST['captcha']).'&auth%5Bremember%5D=on'); curl_setopt($ch, CURLOPT_COOKIE, $cookies); $res = curl_exec($ch); curl_close($ch); }
PHP: if(!isset($_POST['captcha'])) { ### Заходим на сайт и получаем капчу $ch = curl_init('http://mirtesen.ru/login'); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_USERAGENT, 'Opera/9.25 (Windows NT 5.1; U; ru)'); $res = curl_exec($ch); curl_close($ch); ### Получаем код для картинки preg_match('#<img src="http://mirtesen.ru/captcha/login?(.*?)"#i', $res, $match_capt); ### Получаем куки preg_match_all('|Set-Cookie: (.*);|U', $res, $results); $cookies = implode(';', $results[1]); ### Показываем капчу echo '<img src="http://mirtesen.ru/captcha/login'.$match_capt[1].'" alt=""> <p><form name="spam" action="index.php" method="POST"> <input type="text" name="captcha"> <input type="submit" value ="Ok"></form>'; } ### Отправляем обратно капчу/логин/пассворд if(isset($_POST['captcha'])){ $ch = curl_init('http://mirtesen.ru/login'); curl_setopt($ch, CURLOPT_USERAGENT, 'Opera/9.25 (Windows NT 5.1; U; ru)'); curl_setopt($ch, CURLOPT_PROXY, $proxy); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, 'auth%5Bbackurl%5D=http%3A%2F%2Fmirtesen.ru%2F&auth%5Blogin%5D=LOGIN%40mail.ru&auth%5Bpassword%5D=PASSWORD&auth%5Bcaptcha%5D='.trim($_POST['captcha']).'&auth%5Bremember%5D=on'); curl_setopt($ch, CURLOPT_COOKIE, $cookies); $res = curl_exec($ch); curl_close($ch); } т.е если скрипту не передаются данные из формы - выводит капчу и окошко для ввода, если передаются - отправляет
Запросы все отсылаются, но не логинится. Скорее всего бока с отправкой каптчи, ну сам алгоритм В куках с рисунком каптчи передаётся параметр mirtesen похожий на md5, но если захешировать номер каптчи, то они не совпадают + появляются поля htold и told
PHP: <?php // html print_r(' <html> <head> <title>Test page!</title> <meta http-equiv="Content-type" content="text/html; charset="windows-1251"> <meta name="keywords" content="Test of my product" > <meta name="description" content="Test of scritps, writed by ac1d"> </head> <body bgcolor="black"> <font style="font-size: 30px; color: #006400;"> '); $chb = '<input type="checkbox" name="dir" value="1"> '; // установка соединения $conn_id = ftp_connect("host"); // вход с именем пользователя и паролем $login_result = ftp_login($conn_id, "login", "password"); // проверка соединения if ((!$conn_id) || (!$login_result)) { die("Не удалось подключиться к FTP серверу!"); } echo "<b>Текущая директория:</b>" . ftp_pwd($conn_id) . "\n"; // попытка сделать somedir текущей if (ftp_chdir($conn_id, "/php/")) { echo ftp_pwd($conn_id) . "<br> \n"; } else { echo "Не удалось сменить директорию <br> \n"; } $site = ftp_nlist($conn_id, "."); foreach($site as $v) { if(!is_dir($v)) { echo $chb . $v . '<br>'; } } // закрытие соединения ftp_close($conn_id); print_r(' </font> </body> </html>'); ?>
И также я заметил, незнаю почему, выводится 2 параметра установки куков из первого курла (я юзал регулярку preg_match_all('/Set-Cookie: ([^;]*)/i', $res, $cookies); ) Code: Array ( [0] => Array ( [0] => Set-Cookie: mirtesen=jn35v1f3g248ufdr6aelhannb5 [1] => Set-Cookie: mirtesen=0p48pipogk4oj7497a1po09gi6 ) [1] => Array ( [0] => mirtesen=jn35v1f3g248ufdr6aelhannb5 [1] => mirtesen=0p48pipogk4oj7497a1po09gi6 ) )
Я пробывал оба, но результата 0 как нистранно Вобщем идея такова, когда ты получаешь контент - картинка одна. Когда браузер её загружает в img она другая Т.е. суть такова, что нада сохранять картинку с заголовком, потом показывать пользователю
Всем Добрый День, есть небольшой вопрос, помогите, пожалуйста, решить. Есть две строки, допустим: Code: $str1="index.php?var={num}&text={rus}¶m={eng}"; $str2="{rus}/page-{num}/{eng}.html"; Необходимо, преобразовать $str2 в: Code: $str2="2/page-1/3.html"; т.е нужно из $str1, выбрать весь текст в фигурных скобках ({num}, {rus}, {eng}), а также его местоположение в строке (т.е {num} стоит первый, {rus} - второй и т.д) и заменить каждый соответсвующий текст в фигурных скобках ({num}, {rus}, {eng}), в $str2 на его местоположение в $str1 P/S Строки и местоположение {num}, {rus}, {eng} всегда разное!
Geforse Косяков у вас, что даже писать долго. Вот работающая версия: PHP: $login = ''; $pass = ''; session_start(); function post($url='',$content=null,$referer=null,$follow=0) { GLOBAL $cookie; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_TIMEOUT, 15); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.1) Gecko/2008070208'); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $follow); if (!empty($cookie)) curl_setopt($ch, CURLOPT_COOKIE, implode('; ',array_values($cookie))); if (!empty($content)) {curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, $content);} else {curl_setopt($ch, CURLOPT_POST, 0);} if (!empty($referer)) curl_setopt($ch, CURLOPT_REFERER, $referer); $ss=curl_exec($ch); curl_close($ch); if (preg_match_all('#^Set-Cookie: (([^;=]+)=([^;=]+))#mi',$ss,$cook)) { if ($tmpcookie=array_combine($cook[2],$cook[1])) $cookie=(array)$tmpcookie + (array)$cookie; } return preg_replace('~[\s\S]+\r\n\r\n~U','',$ss,1); } if (!isset($_POST['captcha'])) { // Удаляем сессионный файл, чтобы не путал unset($_SESSION['mir']); // Получаем начальные куки $in = post('http://mirtesen.ru/login'); preg_match('#<img src="http://mirtesen.ru/captcha/login?(.*?)"#i', $in, $match_capt); // Делаем локальную копию куки ()ак надо) file_put_contents('local.jpg',post('http://mirtesen.ru/captcha/login?'.$match_capt[1],null,'http://mirtesen.ru/login')); // Выводим форму echo '<img src="local.jpg" alt=""><p><form name="spam" method="POST"> <input type="text" name="captcha"> <input type="submit" value ="Ok"></form>'; // Сохраняем куки полученные при данном запуске $_SESSION['mir']=serialize($cookie); } else { // Загружаем куки, полученные при первом запуске скрипта $cookie = $_SESSION['mir'] ? unserialize($_SESSION['mir']) : array(); // Логинимся post('http://mirtesen.ru/login','auth%5Bbackurl%5D=&auth%5Blogin%5D='.urlencode($login).'&auth%5Bpassword%5D='.urlencode($pass).'&auth%5Bcaptcha%5D='.trim($_POST['captcha']).'&auth%5Bremember%5D=on','http://mirtesen.ru/login'); // Выводим страницу $out = post('http://mirtesen.ru/'); $out = iconv('UTF-8','Windows-1251',$out); echo $out; } spamoney PHP: echo str_replace(array('{eng}','{rus}'), array('эквивалент енг','эквивалент рус'),$str);
Нет, это совсем не то, необходимо определить местоположение {num} {rus} {eng} в $str1 и уже потом делать замену в $str2, примеры: PHP: $str1="index.php?var={num}&text={rus}¶m={eng}"; $str2="{rus}/page-{num}/{eng}.html"; //Должно получиться: $str3="2/page-1/3.html"; PHP: $str1="main.php?par={eng}&var={num}¶m={rus}"; $str2="{rus}/page-{num}/{eng}.html"; //Должно получиться: $str3="3/page-2/1.html"; PHP: $str1="show.php?tut={rus}&trem={eng}&pabam={num}"; $str2="{rus}/page-{num}/{eng}.html"; //Должно получиться: $str3="1/page-3/2.html"; и т.д
PHP: <?php //$str_1 = "index.php?var={num}&text={rus}¶m={eng}"; $str_1 = 'index.php?var=666&text=111¶m=888'; $str_2 = '{rus}/page-{num}/{eng}.html'; $regexp = '/[\?|&]([^=]*)=([^&]*)/is'; preg_match_all($regexp , $str_1, $match); for($i = 0; $i < count($match[2]); $i++) { switch($match[1][$i]) { case 'var': $var = '{rus}'; break; case 'text': $var = '{num}'; break; case 'param': $var = '{eng}'; break; } //$str_2="666/page-111/888.html"; $str_2 = str_replace($var, $match[2][$i], $str_2); } echo($str_2); ?> или PHP: <?php $str_1 = "index.php?var={num}&text={rus}¶m={eng}"; $str_2 = '{rus}/page-{num}/{eng}.html'; $regexp = '/[\?|&]([^=]*)=([^&]*)/is'; preg_match_all($regexp , $str_1, $match); for($i = 0; $i < count($match[2]); $i++) { switch($match[2][$i]) { case '{rus}': $var = '1'; break; case '{num}': $var = '2'; break; case '{eng}': $var = '3'; break; } $str_2 = str_replace($match[2][$i], $var, $str_2); } echo($str_2); ?> Наверное ты так хотел?
spamoney PHP: $str1="show.php?tut={rus}&trem={eng}&pabam={num}"; $str2="{rus}/page-{num}/{eng}.html"; function zamena($str1,$str2) { $array = array('{rus}','{num}','{eng}'); foreach ($array as $one) $outarr[$one]=strpos($str1,$one); asort($outarr, SORT_NUMERIC); $outarr=array_keys($outarr); foreach ($outarr as $i => $one) $str2 = str_replace($one,$i+1, $str2); return $str2; } echo zamena($str1,$str2);
Есть файл. Там много мусора, но мне с етого файла надо отпарсить IDшники.. ID вигледит так uid="4552312312321" как зделать чтоб скрипт нашёл IDшники и записал их в файл?