Blog. Just Blog
Web-мастеру и не только
Полезные решения для Web-мастеров
Web-мастеру и не только - RSS-канал
Web-мастеру и не только - Карта сайта
Отправка файла на сервер с помощью сокетов
02.02.2012 | Категория: Web-мастеру и не только | Автор: ManHunter
Иногда при разработке проектов возникает задача отправки данных на другие серверы. В случае текстовых данных или небольших объемов бинарных данных можно ограничиться POST- или GET-запросами. Этот способ никаких сложностей не представляет и здесь описываться не будет. А как быть, если на сторонний сервер требуется передать не только данные, но и файлы? Например, вы загружаете картинки через форму на своем сервере, но фактически храните их на каком-нибудь другом. В этом случае нам надо полностью проэмулировать работу браузера, а именно его обмен данными с удаленным сервером, как будто бы пользователь заполнил и отправил форму с web-страницы. Предположим, что для загрузки файлов на сервер используется следующая форма:Code (HTML) : Убрать нумерацию
- <form action="/uploader.php" method="post" enctype="multipart/form-data">
- Выберите файл: <input type="file" name="my_file"><br>
- Описание: <input type="text" name="ext_field_1"><br>
- <input type="submit" value="Загрузить">
- </form>
Каждое текстовое поле в теле запросе кодируется следующим образом:
--boundary
Content-Disposition: form-data; name="имя_поля_в_форме"
значение поляФайлы при передаче кодируются несколько иначе:
--boundary
Content-Disposition: form-data; name="имя_поля" filename="имя_файла"
Content-Type: mime-тип файла
двоичное содержимое файлаКак узнать mime-тип файла по его расширению, написано в этой статье. В заголовках запроса также обязательно должны присутствовать данные об общем размере тела запроса, а именно длина всех кодированных полей формы. Эта информация передается заголовком "Content-Length: NNNN". То есть сперва в вашем обработчике формируется тело запроса, а только после него заголовок.
Читать статью целиком »
Просмотров: 273 | Комментариев: 1
Автоматическое получение Яндекс тИЦ для сайтов
13.12.2011 | Категория: Web-мастеру и не только | Автор: ManHunter
Тематический индекс цитирования (тИЦ) используется в поисковой системе Яндекс и определяет "авторитетность" интернет-ресурсов. Этот индекс используется в различных СЕО-инструментах, однако сам Яндекс не предоставляет никаких средств для его легального получения. Но нам на помощь может прийти разработка самого Яндекса - Яндекс.Бар, в котором при серфинге отображается тИЦ открытого сайта. Очевидно, что эти данные Яндекс.Троян получает от самого сервера, осталось отследить любым сниффером, куда идет обращение и в каком формате. В отличие от Google PR, с Яндексом проблем нет. Никаких дополнительных контрольных сумм для ссылки считать не надо, да и тИЦ единый для всего домена. В итоге все ограничивается одним простым запросом типа:http://bar-navig.yandex.ru/u?ver=2&show=32&url=http://www.manhunter.ru
В качестве значения последнего параметра url передается имя проверяемого домена. В ответ вернется XML-файл, подобный приведенному ниже:
Code: Убрать нумерацию
- <?xml version="1.0" encoding="windows-1251" ?>
- <urlinfo>
- <url domain="www.manhunter.ru"><![CDATA[/]]></url>
- <yaca url="www.manhunter.ru"/>
- <tcy rang="3" value="70"/>
- <topics></topics>
- <textinfo></textinfo>
- </urlinfo>
Просмотров: 1707 | Комментариев: 5
Какая может быть максимальная длина URL?
23.11.2011 | Категория: Web-мастеру и не только | Автор: ManHunter
Однажды, при разработке одного из проектов, я столкнулся с тем, что требовалась передача большого количества данных из формы методом GET, то есть через адресную строку. У меня под браузером Firefox все работало как надо, а вот у манагеров, сидящих на Internet Explorer, выдавалась ошибка, что запрошенная страница не может быть отображена. Как оказалось, проблема была в том, что получалась слишком длинный адрес URL, и ограничения браузера не позволяют его открыть. Причем у Firefox по всей видимости, этот лимит выше, чем у Internet Explorer. Это натолкнуло меня на мысль протестировать различные браузеры на предмет максимально допустимой длины URL, и вот что у меня получилось. Для опытов был написан коротенький скрипт:Code (PHP) : Убрать нумерацию
- if ($_GET['long']) {
- echo '<script>document.write(document.location.href.length);</script>';
- }
- else {
- $long=1;
- for ($i=0; $i<23; $i++) {
- $long=ceil(2*$long);
- echo '<a href="test.php?long='.$long;
- echo '#chk='.str_repeat('x',$long).'_end!">'.$long.'</a><br>';
- }
- }
LimitRequestLine "65535" must not exceed the precompiled maximum of 8190То есть для изменения порогового значения надо перекомпилировать сервер с нужными значениями, а это я сделать не могу, тем более на хостинговом сервере. Пропатчить все проверки в локальной версии сервера тоже не удалось, ограничение все равно оставалось. Поэтому пришлось извернуться через анкор и JavaScript.
Читать статью целиком »
Просмотров: 2136 | Комментариев: 3
Релевантный поиск по базе MySQL
04.11.2011 | Категория: Web-мастеру и не только | Автор: ManHunter

Релевантный поиск по базе MySQL
Я уже писал о возможностях поиска с учетом морфологии, а теперь обещанная статья о релевантном поиске по базе MySQL. Как разъясняют словари, релевантность - в поисковых системах - мера соответствия результатов поиска задаче поставленной в запросе. То есть чем ближе найденный результат соответствует искомому, тем выше в результатах поиска он должен находиться. Применительно к выборке из базы, в строках результата релевантность должна быть представлена неким числовым значением, по которому эта выборка должна быть отсортирована.
Начнем с теории. Если мы ищем строку из нескольких слов среди нескольких текстов, то наибольшей релевантностью обладает текст, в котором встречается вся эта строка целиком и точно в том виде, как ее задали к поиску. Затем идут тексты, где есть все слова из искомой фразы, но расположенные не по порядку. После них идут тексты, где встречаются только отдельные слова, и, чем меньше слов из фразы, тем ниже релевантность. К тому же слова из заголовка текста должны иметь поисковый вес больше, чем такие же слова из текста.
Читать статью целиком »
Просмотров: 2093 | Комментариев: 4
Новый алгоритм получения Google PageRank
11.10.2011 | Категория: Web-мастеру и не только | Автор: ManHunter
Буквально на днях Google поменял алгоритм, по которому генерировалась ссылка для получения показателей Google PageRank. В результате этого отвалились многие сервисы, вспомогательные программы, сторонние тулбары, счетчики и еще бессчетное количество сеошного барахла. Мне было бы глубоко фиолетово на их проблемы, но у меня на сайте тоже используется система автоматического съема значений Google PR. Поэтому пришлось быстренько адаптироваться к новым условиям. Я установил себе гугловский тулбар, быстренько выпотрошил его и получил алгоритм генерации ссылки для получения Google PageRank. Вот как он выглядит на JavaScript:Code (JavaScript) : Убрать нумерацию
- <script type="text/javascript">
- // Программисты Google явно с юмором :)
- var HASH_SEED = "Mining PageRank is AGAINST GOOGLE'S TERMS OF SERVICE. "+
- "Yes, I'm talking to you, scammer.";
- // Расчет хэша строки запроса
- awesomeHash = function(a) {
- var b = 16909125;
- for (c = 0; c < a.length; c++) {
- b ^= HASH_SEED.charCodeAt(c % HASH_SEED.length) ^ a.charCodeAt(c);
- b = b >>> 23 | b << 9;
- }
- return '8'+hexEncodeU32(b);
- };
- // Перевод числа в HEX-значение
- hexEncodeU32 = function(a) {
- var b = toHex8(a >>> 24);
- b += toHex8(a >>> 16 & 255);
- b += toHex8(a >>> 8 & 255);
- return b + toHex8(a & 255)
- };
- toHex8 = function(a) {
- return (a < 16 ? "0": "") + a.toString(16)
- };
- // Функция получения ссылки для запроса Google PR
- getPageRankLink = function(a) {
- return 'http://toolbarqueries.google.ru/tbr?features=Rank'+
- '&client=navclient-auto-ff&ch='+awesomeHash(a)+'&q=info:'+
- encodeURIComponent(a);
- }
- </script>
Code (JavaScript) : Убрать нумерацию
- <script type="text/javascript">
- // Пример использования
- st='http://www.manhunter.ru/'
- alert(getPageRankLink(st));
- </script>
Читать статью целиком »
Просмотров: 1569 | Комментариев: 8
