здравствуйте, подскажите пожалуйста. есть авторизация. https://supply.elfmoney.ru/login/?next=/ с csrfmiddlewaretoken, и ssl. подскажите что не так делаю. 1 шаг - парсю токен, 2ой пытаюсь отправить данные для авторизации, на что получаю ответ Code: Ошибка curl: SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failedhuy PHP: <? $a = getSslPage("https://supply.elfmoney.ru/login/"); $pos = strpos($a,"csrfmiddlewaretoken"); $a = substr($a,$pos+28); $pos = strpos($a,"' />"); $token = substr($a,0,$pos); echo $token; $login = "login"; $password = "pass"; $user_agent = 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0'; $url = "https://supply.elfmoney.ru/login/"; $ch = curl_init(); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_USERAGENT, $user_agent); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . 'cookie.txt'); curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . 'cookie.txt'); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_REFERER, $url); curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 1); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_URL, 'https://supply.elfmoney.ru/accounts/login/'); $post = array( 'csrfmiddlewaretoken' => $token, 'next' => '/new/', 'password' => $password, 'username' => $login ); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post)); $answer = curl_exec($ch); echo 'Ошибка curl: ' . curl_error($ch); echo $answer; curl_close($ch); function getSslPage($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_REFERER, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); $result = curl_exec($ch); curl_close($ch); return $result; } ?>
Всем привет! что лучше применить для защиты исходного кода в php файлах ? есть ли надёжный крипт ? чем удобно и надёжно кодировать содержимое и что бы такое содержимое могло работать на разных серверах apache, nginx...
Пытался выполнить $fp = fsockopen("ssl://google.com", 443); TopServer 2.1 (PHP 5.1.6) выдал: Unable to find the socket transport "ssl" - did you forget to enable it when you configured PHP? (40) Полез в php.ini, раскомментировал php_openssl.dll. Перезагрузил topserver, а там, оказывается, нет такого dll. Стал пробовал разные php_openssl.dll из интернетов - везде после перезагрузки показывает то "Не найдена указанная процедура", то "Не найден указанный модуль". Что ж делать? Или я вообще не туда копаю, и для открытия сокета по ssl нужен другая библиотека (не openssl)? Только cURL не предлагайте, пожалуйста.
вот http://hardmandev.com/wa-data/public/site/files/denwerlib.zip необходимый набор библиотек для Openssl
Почему так работает <?php $s=file_get_contents('http://site.ru/'); preg_match_all('|/templates/(.*?)/favicon.ico|i', $s, $m); echo "".$m[1][0].""; ?> А так ошибка <?php $s=file_get_contents('http://$_SERVER['SERVER_NAME']'); preg_match_all('|/templates/(.*?)/favicon.ico|i', $s, $m); echo "".$m[1][0].""; ?>
<?php $s=file_get_contents("http://$_SERVER['SERVER_NAME']"); preg_match_all('|/templates/(.*?)/favicon.ico|i', $s, $m); echo "".$m[1][0].""; ?> Все равно ошибка
PHP: $s=file_get_contents("http://{$_SERVER['SERVER_NAME']}"); или (не желательно) PHP: $s=file_get_contents("http://$_SERVER[SERVER_NAME]"); или PHP: $s=file_get_contents('http://'.$_SERVER['SERVER_NAME']);
Как вывести все фразы из текстовика, которые соответствуют регулярке. К примеру в файле много буков, я хочу вывести все предложения со словом привет Записи в файле в виде
Привет, у меня скрипт который парсит стратицу _http://www.calleasy.com/rates/calling-rates по умолчанию, на странице выбрана валюта USD и до того как парсить страницу, мне нужно сменить на EUR. Насколько я смог разобраться, после переключения на странице вылюты на EUR, в браузере меняется кука "preferredcurrency". Как сменить валюту на евро, при загрузке страницы при помощи CuRL?
PHP: curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt"); или PHP: curl_setopt($ch, CURLOPT_COOKIE, "preferredcurrency=EUR");
Помогите не работает скрипт данные в формах изменяю жму 0к и ничего не изменяется в базе и как вывести эти даты в другом формате не так как в базе (6555455656) нужно редактировать даты на веб странице! Code: <?php /* Соединяемся с базой данных */ $hostname = "localhost"; // название/путь сервера, с MySQL $username = "root"; // имя пользователя (в Denwer`е по умолчанию "root") $password = ""; // пароль пользователя (в Denwer`е по умолчанию пароль отсутствует, этот параметр можно оставить пустым) $dbName = "baza"; // название базы данных /* Таблица MySQL, в которой хранятся данные */ $table = "members"; /* Создаем соединение */ mysql_connect($hostname, $username, $password) or die ("Не могу создать соединение"); /* Выбираем базу данных. Если произойдет ошибка - вывести ее */ mysql_select_db($dbName) or die (mysql_error()); /* Если была нажата кнопка редактирования, вносим изменения */ if(@$submit_edit) { $query = "UPDATE $table SET `joined`='".$name_reas_can."' WHERE `id_rea_can`='.$update.'"; /* Выполняем запрос. Если произойдет ошибка - вывести ее. */ mysql_query($query) or die (mysql_error()); } /* Заносим в переменную $res всю базу данных */ $query = "SELECT * FROM $table"; /* Выполняем запрос. Если произойдет ошибка - вывести ее. */ $res = mysql_query($query) or die(mysql_error()); /* Узнаем количество записей в базе данных */ $row = mysql_num_rows($res); /* Выводим данные из таблицы */ echo (" <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"> <html xmlns=\"http://www.w3.org/1999/xhtml\"> <head> <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" /> <title>Редактирование и обновление данных</title> <style type=\"text/css\"> <!-- body { font: 12px Georgia; color: #666; } h3 { font-size: 16px; text-align: center; } table { width: 400px; border-collapse: collapse; margin: 5px auto; background: #E6E6E6; } td { padding: 3px; vertical-align: middle; } input { width: 250px; border: solid 1px #CCC; color: #FF6666; } textarea { width: 250px; height: 100px; border: solid 1px #CCC; color: #FF6666; } .buttons { width: auto; border: double 1px #666; background: #D6D6D6; color: #000; } #num { width: 20px; text-align: right; margin-right: 5px; float: right; } --> </style> </head> <body> <h3>Редактирование и обновление данных в таблице MySQL</h3> "); /* Цикл вывода данных из базы конкретных полей */ while ($row = mysql_fetch_array($res)) { echo "<form action=\"index.php\" method=\"post\" joined=\"edit_form\">\n"; echo "<input type=\"hidden\" joined=\"update\" value=\"".$row["id_rea_can"]."\" />\n"; echo "<table border=\"1\" cellpadding=\"0\" cellspacing=\"0\">\n"; echo "<tr>\n"; echo "<td colspan=\"2\" style=\"border-bottom:solid 1px #CCCCCC;\"><b><i><div id_rea_can=\"num\">#".$row["id_rea_can"]."</div></b></i></td>\n"; echo "</tr><tr>\n"; echo "<td>Naimenovanie:</td><td><input type=\"text\" value=\"".$row['joined']."\" joined=\"joined\" /></td>\n"; echo "</tr><tr>\n"; echo "<td colspan=\"2\" align=\"center\"><input type=\"submit\" namjoined=\"submit_edit\" class=\"buttons\" value=\"Сохранить изменения\" /></td>\n"; echo "</tr></table></form>\n\n"; } /* Закрываем соединение */ mysql_close(); /* Выводим ссылку возврата */ echo ("<div style=\"text-align: center; margin-top: 10px;\"><a href=\"index.html\">Вернуться назад</a></div>");
Похоже что я понял почему отправка кук опцией PHP: curl_setopt($ch, CURLOPT_COOKIE, "preferredcurrency=EUR"); не помогает в моем случае. Если я не ошибаюсь, куки отправляются и читаются javascript Code: prefcur = retrieveCookie('preferredcurrency'); (Это фрагмент из скрипта) Только мне нужна помощь как мне в таком случае сменить ваюту прежде чем я буду парсить страницу?
все значения пересчитываются скриптом, а не подгружаются по сути у тебя всё на руках, нужно только переписать функцию из JS в PHP эти два вызова функции висят на событиях [изменение значения] у списков валют и стран: PHP: alterRatesTable(this[this.selectedIndex].value, true, currency_symbols, 3, 'true', $('#select-rates-country').val()); alterRatesTable(document.getElementById('select-rates-currency').value, true, currency_symbols, '3','true', this[this.selectedIndex].value) код функции alterRatesTable — перерисовки таблицы, где берутся коэффициенты и пересчитываются значения. код привел к более человеческому виду и кое что прокомментировал для лёгкого старта: PHP: /*e - выбранная валюта например "0.1003;ARS/min" отсюда: <option value="0.1003;ARS/min">Argentine Peso</option> r - отображать ли символ валют s - массив символик валют отсюда: http://www.calleasy.com/resource/js/currency_symbols.min.js t - знаки после запятой (3) n - хз l - страна*/ function alterRatesTable(e, r, s, t, n, l) { var a = { 40: 20, 56: 21, 100: 20, 191: 25, 196: 19, 203: 21, 208: 25, 233: 20, 246: 24, 250: 20, 276: 19, 300: 23, 348: 27, 372: 23, 380: 22, 428: 21, 440: 21, 442: 17, 470: 18, 528: 21, 616: 23, 620: 23, 642: 24, 703: 19, 705: 22, 724: 21, 752: 25, 826: 20 }, o = "undefined" != typeof a[l] ? new Date > new Date("01/01/2015") ? a[l] : 15 : 0, i = document.getElementById("rates-table"), c = e.split(";"), // разбивается "0.1003;ARS/min" u = 1 / c[0], // коэффициент, множитель = 1 / 0.1003 f = c[1]; // ARS/min f = f.split(";"); f[1]; f = f[0]; // ARS/min var w = new String(f), p = w.split("/min"), // [0]=>ARS d = p[0], // ARS g = 0, L = d.split("/"); // ARS if (L = L[0], null != i) if (i.rows[0].cells[1].innerHTML = f, 0 == orgtabledata.length) { var b = 0, m = new Array; for (m.push("dumb and"), m.push("dumber"), orgtabledata.push(m), b = 1; b < i.rows.length; b++) if ("rates-letters" != i.rows[b].cells[0].className) { var M = "object" == typeof i.rows[b].cells[2]; if ("column-rate" == i.rows[b].cells[1].className) { var T = new Array; T.push(i.rows[b].cells[1].innerHTML), M && T.push(i.rows[b].cells[2].innerHTML), orgtabledata.push(T); var h = stripNbsp(i.rows[b].cells[1].innerHTML); - 1 != h.indexOf(" ") && (h = h.substr(h.indexOf(" ") + 1, h.length - 1)), g = parseFloat(h) + parseFloat(h) * (o / 100); var H = parseFloat(h), v = parseFloat(g); isNaN(H) || (i.rows[b].cells[0].innerHTML = alterLink(i.rows[b].cells[0].innerHTML, d), 1 == r ? (s[L] && (L = s[L]), "false" == n && (L = ""), i.rows[b].cells[1].innerHTML = L + " " + formatCur(H * u, t), M && (i.rows[b].cells[2].innerHTML = L + " " + formatCur(v * u, t))) : isNaN(v) ? (i.rows[b].cells[1].innerHTML = formatCur(H * u, t), M && (i.rows[b].cells[2].innerHTML = "")) : (i.rows[b].cells[1].innerHTML = formatCur(H * u, t), M && (i.rows[b].cells[2].innerHTML = formatCur(v * u, t)))) } else orgtabledata.push(m) } else orgtabledata.push(m) } else { var b = 0; for (i.rows[0].cells[1].innerHTML = f, b = 1; b < i.rows.length; b++) if ("rates-letters" != i.rows[b].cells[0].className) { var M = "object" == typeof i.rows[b].cells[2]; if ("column-rate" == i.rows[b].cells[1].className) { var h = stripNbsp(orgtabledata[b][0]); - 1 != h.indexOf(" ") && (h = h.substr(h.indexOf(" ") + 1, h.length - 1)), g = parseFloat(h) + parseFloat(h) * (o / 100); var H = parseFloat(h), v = parseFloat(g); isNaN(H) || (i.rows[b].cells[0].innerHTML = alterLink(i.rows[b].cells[0].innerHTML, d), 1 == r ? (s[L] && (L = s[L]), "false" == n && (L = ""), i.rows[b].cells[1].innerHTML = L + " " + formatCur(H * u, t), M && (i.rows[b].cells[2].innerHTML = L + " " + formatCur(v * u, t))) : isNaN(v) ? (i.rows[b].cells[1].innerHTML = formatCur(H * u, t), M && (i.rows[b].cells[2].innerHTML = " ")) : (i.rows[b].cells[1].innerHTML = formatCur(H * u, t), M && (i.rows[b].cells[2].innerHTML = formatCur(v * u, t)))) } } } d = d.split("/"), setCookie("preferredcurrency", d[0], 31536e3, "/"), setCookie("preferredisocode", l, 31536e3, "/") }
roxblnfk, спасибо запомощь. Честно говоря, мне тоже приходила мысль пересчитывать полученные значания в евро, только я тогда еще не разобрался откуда брать курсы валют, что бы они оказались равными с источником. Я не обращал внимания на то что они есть в скрипте, пока вы не показали в комментариях. Теперь ясно откуда их можно выташить. B к тому же я думал только над отправкой кук, потому как сайтов, которые буду парсить много и только на нескольких из них цены по умолчанию показывают не в EUR. Насколько я понял, передать JavaScript куки без эмуляции браузера задача сложная. Верно или нет?
Я имел в виду если все же попытаться отправить куки javascript до того как парсить страницу. То есть, если не возможно отправить куки curl, то наверно можно эмулировать работу браузера, передать куки а после парсить страницу.