LINUX.ORG.RU

Cross-site запрос из браузера

 


0

1

Стоит задача автоматизации проверки штрафов для целого парка автомобилей предприятия. На официальном сайте gibdd.ru есть api, но там информация только об отделениях ГИБДД (если правильно понял). Получение же инфы через их сервис http://www.gibdd.ru/check/fines/ с вводом капчи слишком трудоемкий процесс для оператора. Есть сторонние сайты без ввода капчи, например, onlinegibdd.ru/servisy/proverit_shtrafy/?do=by_voditel или https://www.a-3.ru. Есть мысль скормить список авто с СТС в цикле в виде get-запроса и получить/не получить результат.

Вот примерный код:

<!DOCTYPE HTML>
<html lang="ru">

<head>
  <!-- Тег meta для указания кодировки -->
  <meta charset="utf-8">
</head>

<body>
 
<script type="text/javascript">
url="https://www.a-3.ru/pay_gibdd?field_0_26=здесь номер СТС"
    var xmlhttp;
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open("GET", url, true); // Открываем асинхронное соединение
    xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); // Отправляем кодировку
    xmlhttp.send(null);
</script>

</body>

</html>

Ответа никакого. Возможна ли такая задачи или она решается по-другому? Подскажите варианты, пожалуйста. Если можно то подробнее и с примерами.


Ajax не работает на другие домены/сайты. Только на сервере node.js можешь всё это выкачать. Лучше взять готовый движок-скраппер, по типу https://github.com/IonicaBizau/scrape-it

menangen ★★★★★ ()
Ответ на: комментарий от menangen

как раз напротив, для того чтобы сделать такую ерунду, реализуемую в десяток строк, не стоит тащить говно

filequest ()

вводом капчи слишком трудоемкий процесс

Распознавание изображения стоит недорого, по паре баксов за месяц можно подвинуться.

ThisNameWasFree ()
Ответ на: комментарий от filequest

как раз напротив, для того чтобы сделать такую ерунду, реализуемую в >>десяток строк, не стоит тащить говно
filequest (14.05.2016 23:07:23)

Как? Для Вас ерунда, для меня пока что страдания. Предполагаю, что нужно как-то имитировать нажатие кнопки по id, далее результат, который выводится в окно, тоже считывать по id окна.

m1fs1 ()

Постановка задачи неверная. Подсказка: подумай вначале о том, что в браузере страничка со скриптом откуда появляется?

bigov ()
Ответ на: комментарий от bigov

Постановка задачи неверная. Подсказка: подумай вначале о том, что в браузере страничка со скриптом откуда появляется?

Не совсем понял. Если речь о скрипте с запрашиваемых сайтов, то они на сервере. Какая тогда должна быть постановка вопроса? И решаемая ли в подобной форме?

m1fs1 ()
Ответ на: комментарий от menangen

Только на сервере node.js можешь всё это выкачать

Ложь.

r_asian ☆☆☆ ()
Ответ на: комментарий от menangen

Работает же.
Можно в настройках сервера это дело разрешить.
Можно в браузере.

Int0l ()
Последнее исправление: Int0l (всего исправлений: 1)
Ответ на: комментарий от Int0l

Снова спрошу - как? В настройках сервера я никак не смогу изменить, где в браузере? Если без nodejs можно обойтись, то в правильном ли направлении я копаю (имею в виду вышеприведенный код)?

m1fs1 ()
Ответ на: комментарий от m1fs1

А на браузере можно вот так отключить. http://stackoverflow.com/questions/3102819/disable-same-origin-policy-in-chrome
П.С. Сам не пробовал. Кстати ты асинхронно запрос выполняешь. Тебе надо обработчик повесить onload.

Int0l ()
Последнее исправление: Int0l (всего исправлений: 1)

Решил мучать себя nodejs.

var request = require('request');
var fs = require("fs");
 
// Set the headers
var headers = {
    'User-Agent':       'Super Agent/0.0.1',
    'Content-Type':     'application/x-www-form-urlencoded'
}
 
// Configure the request
var options = {
    url: 'http://pddmaster.ru/shtrafi/shtrafy-gibdd-po-gos-nomeru.html',
    method: 'GET',
    timeout: 10000,
    headers: headers,
    qs: {'sts': '77МХ******', 'format': 'plain'}
}
 
// Start the request
request(options, function (error, response, body) {
    if (!error && response.statusCode == 200) {
        // Print out the response body
        console.log(body);
        fs.writeFile('pdd.htm', body);
    }
})
Смотрю записанный файл, там есть такие строки: «Загрузка системы поиска штрафов» «Идет поиск штрафов! процесс может занять несколько минут»

Не уверен, то ли это, но вроде то, т.к. когда вручную вбиваю номер СТС, выдается именно эти строки - первая при загрузке страницы, вторая после нажатия кнопки «Искать!». В ответ получим (в случае отсутствия штрафов): «Поздравляем! В Государственной информационной системе по Вашим данным не нашлось ни одного штрафа.»

Это сообщения в созданном файле нет. Возможно, что таймаут не срабатывает или другое?

m1fs1 ()
Ответ на: комментарий от m1fs1

Читай про AJAX.
Ты же скачиваешь страницу.
На ней есть скрипты, которые спрашивают у сервака.
Тебе надо не саму страницу загружать. А сделать запрос такой же, как делают эти скрипты.

Int0l ()
Последнее исправление: Int0l (всего исправлений: 1)
var params = "fld[sts]=322234234&fld[type]=10 ";

var xhr = new XMLHttpRequest();
xhr.open("POST", "http://m.pddmaster.ru/b/s-ch/", true);
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
xhr.onload = function(){
    console.log(this.responseText);
}
xhr.send(params);

Держи. Вот код для браузера. В верхней строке fld[sts]=«Серия и номер свидетельства о регистрации»
Выполнять можно только с страницы сайта(наверно).
Можно завернуть результат в таблицу и распечатать.

Int0l ()
Последнее исправление: Int0l (всего исправлений: 3)
Ответ на: комментарий от Int0l

Ты же скачиваешь страницу.
На ней есть скрипты, которые спрашивают у сервака.
Тебе надо не саму страницу загружать. А сделать запрос такой же, как >>делают эти скрипты.

Но скрипты же сами не грузятся на странице, их содержимое неизвестно. Запросы, которые делают скрипты, наверняка содержат логин/пароль для подключения к базе штрафов (если я правильно понял, то все получается через портал госуслуг - http://smev.gosuslugi.ru/portal/, https://toster.ru/q/138645). Поэтому тут только два выхода - подключится к сайту госуслуг (там требования какие-то страшные для сложноподчиненных организаций) или только через сторонние сайты, предоставляющие такие услуги.

m1fs1 ()
Ответ на: комментарий от Int0l

Выполнять можно только с страницы сайта(наверно).

Как понять? Может я чего-то не так делаю? Пишу html-страницу с js-кодом и просто запускаю браузером. Ваш код выдает: «Запрос из постороннего источника заблокирован: Политика одного источника запрещает чтение удаленного ресурса на http://m.pddmaster.ru/b/s-ch/. (Причина: отсутствует заголовок CORS 'Access-Control-Allow-Origin').» Тут опят два варианта - либо в header что-то надо добавить (пробовал так - xhr.setRequestHeader(«Content-type», «application/x-www-form-urlencoded; charset=UTF-8»,«Access-Control-Allow-Origin: *»); - не помогло) , либо на данном сайте запрещены кросс-доменные запросы.

m1fs1 ()
Ответ на: комментарий от m1fs1

1)Пароль для этого сайта не надо(ты фантазер).
2) http://pddmaster.ru/shtrafi/shtrafy-gibdd-po-gos-nomeru.html Вот сюда заходишь, и в консоле браузера выполняешь скрипт. Если хочешь со своей страницы запросы делать отключай полиси, или перепиши на node.js.

Int0l ()
Последнее исправление: Int0l (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.