Release 1.1

XML-сервис

Добавлено: Пятница, 13 Марта, 2009 16:07       Размещено в: Новости проекта

Убедительная просьба, если Вам надо прокачать большое количество адресов, просьба заключать их в один запрос (не более 4000 Ip в одном запросе). В скором времени будет выложен пример скрипта на perl для прокачки лога Apache.
Теперь мы подключили XML-сервис обработки запросов на определение местонахождения российских IP-адресов. Сервис обслуживается специальным сервером. Сервер получает запрос в формате XML через POST HTTP запрос, отдает ответ также в формате XML.

Сервер расположен по адресу 194.85.91.253, порт 8090, работает по протоколу HTTP. Метод GET сервером не поддерживается. Минимальный заголовок HTTP запроса выглядит следующим образом:

POST /geo/geo.html HTTP/1.1
Content-length: CL
,где CL - длина тела запроса

Формат тела запроса выглядит следующим образом:
<ipquery [id="123456"]>
<fields>
[<all/>]
[<inetnum/>]
[<inet-descr/>]
[<inet-status/>]
[<city/>]
[<region/>]
[<district/>]
[<lat/>]
[<lng/>]
</fields>
<ip-list>
<ip>62.5.128.0</ip>
<ip>144.206.192.23</ip>
….
<ip>85.44.33.22</ip>
</ip-list>
</ipquery>
,где id=”123456″ - необязательный параметр. Это идентификатор запроса, в кавычках - любые числа и буквы, ответ сервера будет содержать указанный вами id; тег <fields> содержит поля, которые вы хотите получить:
<inetnum/> - блок адресов, к которому относится искомый ip-адрес
<inet-descr/> - описание блока по базе RIPE (www.ripe.net)
<inet-status/> - статус блока по базе RIPE
<city/> - город, к которому относится искомый ip
<region/> - регион, к которому относится искомый ip
<district/> - федеральный округ РФ, к которому относится искомый ip
<lat/> - географическая широта города
<lng/> - географическая долгота города
<all/> - все вышеперечисленные поля
В теге <ip-list> содержится список ip, которые надо прокачать. Это может быть один ip, или несколько. Максимальное количество 4000 ip в одном запросе. Каждый ip обрамляется тегами <ip> и </ip>.
Формат ответа сервера:
<ip-answer id=”123456″>
<ip value=”62.5.128.0″>
<inetnum>62.5.128.0 - 62.5.128.15</inetnum>
<inet-descr>Subnetwork for VA159-RIPE</inet-descr>
<inet-status>ASSIGNED PA</inet-status>
<city>Москва</city>
<region>Москва</region>
<district>Центральный</district>
<lat>55.755787</lat>
<lng>37.617634</lng>
</ip>
….
</ip-answer>
По каждому адресу, мы получаем список полей, которые мы указали в <fields> в запросе. В вышеуказанном примере ответа в запросе был указан <all/>.
Для обращения к серверу с вашего сайта, можно использовать стандартную библиотеку HTTP (имеется практически во всех языках программирования). Подключаемся к 194.85.91.253:8090, отправляем POST запрос на /geo/geo.html, в котором содержится <ipquery>…</ipquery>. В скором времени будут выложены примеры на различных языках.

Для обращения к серверу через форму нужно вставить такой HTML код:

<form name = “index” action = “http://194.85.91.253:8090/geo/geo.html” method = “post”>
<textarea name=”address”></textarea>
<input type=”submit” value=”OK”>
</form>

Названия формы и поля <textarea> не важны. В поле textarea вставляется запрос в формате XML, указанный выше. Например:

150 комментариев на тему “XML-сервис”:

Страницы: « 1 [2] 3 4 5 » Показать все комментарии

  1. 31
    Администратор ответил:
    2Администратор:

    Спасибо огромное за сервис! Бесценная информация для анализа аудитории сайта по регионам.
    Однако не помешалобы в ответе вашего шлюза еще один параметр - название провайдера (ISP)
    как например выводится в ответе на запрос http://www.vline.ru/ip/?ip=x.x.x.x
    (поля netname и desc или хотябы только netname)

    Есть ли подобная информация в Вашей базе?
    Если да, то сможете ли Вы ее возвражать в ответе на запрос?
    Не планируете ли Вы создать HTTP-GET запрос по единственному IP по образцу приведенному мной выше? например чтото вроде http://194.85.91.253:8090/?ip=x.x.x.x
    Планируете ли Вы ввести ограничение на кол-во запрос с одного IP за единицу времени?
    Если да, то какой лимит будет установлен?

    Вам спасибо за отзыв :)
    Поле netname не доступно, однако если в запросе указать тег <inet-descr/>, то сервер отдаст описание блока.
    Запрос GET не будет поддерживаться, т.к. сервис изначально задумывался для прокачивания большого количества адресов.
    пока сервис находится в тестовом режиме и ограничений не будет. Однако, если сервер будут спамить одним и тем же запросом, то адрес такого клиента будет забанен.

  2. 32
    Scorpio ответил:

    1) Насчет GET запроса - очень жаль ибо в 99% случаев передача 1-го адреса достаточно, что позволило бы упростить как клиентскую часть, так и парсер на вашей серверной стороне. Дополнительные атрабуты типа того же inet-descr тоже можно былоб передать в хвосте GET-запроса.
    Другими словами я предлагаю вовсе не отказ от использования POST запроса, а дополнительный GET-запрос в тех случаях когда нужно запросить всего 1 IP.

    2) Бан по IP в наше время уже неэффективен ибо региональные ISP раздают статику за дополнительную плату ежемесячно да и для сайтов все чаще используется DDNS. Банить же целыми диапазонами IP-адресов несправедливо по отношению к непровинившимся пользователям вашего сервиса. Самое эффективное средство в данном случае - ограничение колва запросов с одного IP в минуту.

    PS Лавинообразный рост интереса к вашему сервису думаю неизбежен и оба моих пожелания думаю помогли бы вам избежать проблем с нагрузкой на сервис в будущем. А мне как клиенту нехотелось бы потерять к нему доступ по причине чьихто злоупотреблений.

  3. 33
    Администратор ответил:
    1) Насчет GET запроса - очень жаль ибо в 99% случаев передача 1-го адреса достаточно, что позволило бы упростить как клиентскую часть, так и парсер на вашей серверной стороне. Дополнительные атрабуты типа того же inet-descr тоже можно былоб передать в хвосте GET-запроса.
    Другими словами я предлагаю вовсе не отказ от использования POST запроса, а дополнительный GET-запрос в тех случаях когда нужно запросить всего 1 IP.

    2) Бан по IP в наше время уже неэффективен ибо региональные ISP раздают статику за дополнительную плату ежемесячно да и для сайтов все чаще используется DDNS. Банить же целыми диапазонами IP-адресов несправедливо по отношению к непровинившимся пользователям вашего сервиса. Самое эффективное средство в данном случае - ограничение колва запросов с одного IP в минуту.

    PS Лавинообразный рост интереса к вашему сервису думаю неизбежен и оба моих пожелания думаю помогли бы вам избежать проблем с нагрузкой на сервис в будущем. А мне как клиенту нехотелось бы потерять к нему доступ по причине чьихто злоупотреблений.

    Cервер работает на достаточно шустрых алгоритмах и может искать адреса со скоростью 6000-8000 IP в секунду для каждого подключившегося клиента. Он изначально расчитывался для прокачки больших логов. Поэтому GET сводит на нет все достоинства данного сервера.
    Еще раз повторюсь, что он работает в тестовом режиме и в случае лавинообразного роста клиентов мы введем ограничение на кол-во запросов с одного IP-в минуту. Однако в случае с POST-запросом это не доставит неудобств для клиентов. Даже если ограничение будет один запрос в минуту, клиент сможет закешировать всех посетителей своего сайта за эту минуту, а потом отправить нам сразу несколько адресов в одном запросе. В случае с GET ограничение количества запросов с одного IP доставит массу неудобств.

  4. 34
    Rascal ответил:

    Очень полезный сервис, который, в отличение от MaxMind GeoIP знает о географии России.
    Внутри тега встречаются символы недопустимые по стандартам xml, может стоит для него добавить ?

  5. 35
    Rascal ответил:

    Внутри тега <inet-descr> встречаются символы недопустимые по стандартам xml, может стоит для него добавить <![CDATA[]]>. Не знал что теги вырезаются.

  6. 36
    Администратор ответил:
    Очень полезный сервис, который, в отличение от MaxMind GeoIP знает о географии России.
    Внутри тега встречаются символы недопустимые по стандартам xml, может стоит для него добавить ?

    Спасибо за отзыв :)

    Внутри тега встречаются символы недопустимые по стандартам xml, может стоит для него добавить < ![CDATA[]]>. Не знал что теги вырезаются.

    Какие, например, символы встречаются? Что значит вырезаются теги, опишите подробнее проблему.

  7. 37
    Rascal ответил:

    Вырезались теги внутри моего первого сообщения %)
    Насчет {inet-descr}:
    & - не валидный символ внутри нода, но довольно часто встречается.

  8. 38
    Администратор ответил:
    Вырезались теги внутри моего первого сообщения %)
    Насчет {inet-descr}:
    & - не валидный символ внутри нода, но довольно часто встречается.

    Ясно) Просто в теге inet-descr администраторы блоков ip-адресов указывают все что угодно

  9. 39
    Scorpio ответил:

    Очевидный, но недостаточно освещенный в “шапке” вопрос:

    Какова зона охвата вашей базы?

    Только Россия? Вся или частично? Планируется ли расширение базы?

  10. 40
    Администратор ответил:
    Очевидный, но недостаточно освещенный в “шапке” вопрос:

    Какова зона охвата вашей базы?

    Только Россия? Вся или частично? Планируется ли расширение базы?

    На главной странице написано: “Поиск географического местонахождения IP-адреса, выделенного RIPE локальным интернет-реестрам (LIR-ам) для Российской Федерации”.

  11. 41
    Rascal ответил:

    Заметил что некоторые адреса находятся на главной, но не находятся через xml-сервис, например 195.2.233.251.

    Главная:
    Город Отрадное
    Регион Ленинградская область

    XML-сервис:
    Not found

  12. 42
    Администратор ответил:
    Заметил что некоторые адреса находятся на главной, но не находятся через xml-сервис, например 195.2.233.251.

    Главная:
    Город Отрадное
    Регион Ленинградская область

    XML-сервис:
    Not found

    Это ошибка, уже исправлено. Завтра информация обновится. Спасибо за замечание

  13. 43
    Артем ответил:

    Здравствуйте!
    Заметил, что при отправке в запросе (пробел внутри тега) вместо (без пробела внтури тега) сервер не возвращает ни одного поля. Видимо вам нужно поправить парсер. Ведь это тоже well-formed XML.

  14. 44
    Артем ответил:

    В предыдущем посте я имел в виду теги <all /> (с пробелом) и <all/> (без пробела)

  15. 45
    Roman ответил:

    Спасибо за хороши сервис!
    Есть несколько замечаний, надеюсь они помогут улучшить работу сервиса:
    1. Сервис не возвращает информацию по IP если поставить пробел в опциях fields, например если указать вместо , хотя для xml это не является ошибкой
    2. В тексте присутствуют недопустимые для xml символы, например амперсент (R&D), если пользоваться стандартными парсерами, то они выдают ошибку при разборе этих тегов, желательно было бы указывать спец код этих символов (R&D)
    3. Ну и не замечание, а скорее пожелание, использовать кодировку UTF-8 все таки для xml она более стандартная, и поддерживается на разных платформах

  16. 46
    Alex ответил:

    Разместил вашу форму на http://kachay.ucoz.org/ip_geo.htm
    что -то не работает?

  17. 47
    Alex ответил:

    вопрос снят - кавычки ваши скопировал неправильные

  18. 48
    Администратор ответил:
    Здравствуйте!
    Заметил, что при отправке в запросе (пробел внутри тега) вместо (без пробела внтури тега) сервер не возвращает ни одного поля. Видимо вам нужно поправить парсер. Ведь это тоже well-formed XML.
    В предыдущем посте я имел в виду теги <all /> (с пробелом) и <all/> (без пробела)

    Исправили, спасибо за замечание!

  19. 49
    Администратор ответил:
    Спасибо за хороши сервис!
    Есть несколько замечаний, надеюсь они помогут улучшить работу сервиса:
    1. Сервис не возвращает информацию по IP если поставить пробел в опциях fields, например если указать вместо , хотя для xml это не является ошибкой
    2. В тексте присутствуют недопустимые для xml символы, например амперсент (R&D), если пользоваться стандартными парсерами, то они выдают ошибку при разборе этих тегов, желательно было бы указывать спец код этих символов (R&D)
    3. Ну и не замечание, а скорее пожелание, использовать кодировку UTF-8 все таки для xml она более стандартная, и поддерживается на разных платформах

    Спасибо за замечание, исправили недочет с пробелом и недопустимыми символами. Насчет кодировки - появится возможность выбирать кодировку в ближайшем будущем

  20. 50
    Сергей ответил:

    Вот 100% рабочий код на php, который по IP выдает только название города
    <?
    function getip($GetRIP)
    {
    $data = $GetRIP;

    $url = “http://194.85.91.253:8090/geo/geo.html”;
    $ch = curl_init();
    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, “$GetRIP”); // add POST fields
    $result = curl_exec($ch); // run the whole process
    curl_close($ch);
    //echo $result;

    preg_match(”/(.*)/is”, $result, $tmp);

    $city=$tmp[1];

    return $city;

    }

    $my_ip=$_SERVER["REMOTE_ADDR"];
    echo $my_ip.”";

    echo getip($my_ip);

    ?>

  21. 51
    Serg ответил:

    А рабочий пример на perl можно опубликовать?
    Пример от Админа что-то вылетает с Connection timed out.

  22. 52
    Serg ответил:

    Косяк хостера - все работает.
    Спасибо за сервис

  23. 53
    Администратор ответил:
    А рабочий пример на perl можно опубликовать?
    Пример от Админа что-то вылетает с Connection timed out.

    Странно. У меня все работает. Возможно у Вас другая версия perl либо модуля LWP::UserAgent

  24. 54
    Alexander ответил:

    <ipquery><fields><all/></fields><ip-list><ip>194.8.84.1</ip><ip>194.8.84.1</ip><ip>194.8.84.1</ip><ip>194.8.84.1</ip><ip>194.8.84.1</ip></ip-list></ipquery>

    Ответ сервера продублирует данный адрес 4 раза.

  25. 55
    Артем ответил:

    При запросе на сервер получаю в ответ:
    500 Server closed connection without sending any data back
    Что бы это значило?

  26. 56
    Администратор ответил:
    <ipquery><fields><all/></fields><ip-list><ip>194.8.84.1</ip><ip>194.8.84.1</ip><ip>194.8.84.1</ip><ip>194.8.84.1</ip><ip>194.8.84.1</ip></ip-list></ipquery>

    Ответ сервера продублирует данный адрес 4 раза.

    Логично, ведь запрос тоже дублирует 4 раза.

    При запросе на сервер получаю в ответ:
    500 Server closed connection without sending any data back
    Что бы это значило?

    Опишите проблему поподробнее. С какого ip адреса делался зарос, когда, сколько ip примерно было в одном запросе.

  27. 57
    Артем ответил:

    Запрос делался с адреса 77.66.200.177, в запросах было до 3000 адресов. При снижении числа адресов до 50-100 всё отлично

  28. 58
    Администратор ответил:
    Запрос делался с адреса 77.66.200.177, в запросах было до 3000 адресов. При снижении числа адресов до 50-100 всё отлично

    Попробуйте указать в HTTP-загоровке запроса Connection: keep-alive

  29. 59
    phphel ответил:

    function checkip_sites($ip)
    {
    $data=”<<<XML $ip XML’”;
    $ch=curl_init(’http://194.85.91.253:8090/geo/geo.html’);
    curl_setopt($ch,CURLOPT_POST,1);
    curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    $s=curl_exec($ch);
    curl_close($ch);
    if (stristr(trim($s),”Not found”)) {
    exit( “ip $ip не найден в базе \n”);
    }
    $s=simplexml_load_string($s);
    print

    диаппазон: ‘.$s->ip->inetnum.’

    описание: ‘.$s->ip->{’inet-descr’}.’

    город: ‘.$s->ip->city.’

    регион: ‘.$s->ip->region.’

    округ: ‘.$s->ip->district.’

    широта: ‘.$s->ip->lat.’

    долгота: ‘.$s->ip->lng.’
    ‘;
    }

    на php, попробовал взяв за основу один сниппетс, укажите если есть где ошибки

  30. 60
    bezhenez ответил:

    $data = “”.$_SERVER["REMOTE_ADDR"].”";
    $url = “http://194.85.91.253:8090/geo/geo.html”;
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url); // set url to post to
    curl_setopt($ch, CURLOPT_FAILONERROR, 1);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    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, $data); // add POST fields
    $result = curl_exec($ch); // run the whole process
    curl_close($ch);

    возвращает пустоту((( хотя до майских выходных возвращал верно

Страницы: « 1 [2] 3 4 5 » Показать все комментарии

Комментировать:

© 2007-2015 IpGeoBase