debian.org / О Debian Где взять Debian Поддержка Уголок разработчика Новости Wiki

Автор Тема: Мониторинг баланса сотового оператора на BASH  (Прочитано 2378 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Арсланали

  • Мир Вашему дому
  • Новичок форума
  • Topic Author
  • Сообщений: 8
  • Мир Вашему дому
Здравствуйте.
Фрагмент кода который должен выдергивать баланс на Билайне:
#!/bin/sh -e

request_curl -o /tmp/1.html \
        --data "loginFormB2C%3AloginForm=loginFormB2C%3AloginForm&loginFormB2C%3AloginForm%3Alogin=НОМЕР&loginFormB2C%3AloginForm%3Apassword=ПАРОЛЬ&loginFormB2C%3AloginForm%3ApasswordVisibl$ \
        https://my.beeline.ru/login.html
Авторизация в личном кабинете проходит.
Отображается только номер телефона без баланса http://i.imgur.com/FWEquxP.jpg
Баланс подгружается ajax-ом.
Вот нашел такой код на странице показывающий баланс:
<form id="j_idt582:j_idt584" name="j_idt582:j_idt584" method="post" action="./Личный кабинет «Мой Билайн»_files/Личный кабинет «Мой Билайн».html" enctype="application/x-www-form-urlencoded" style="display: none">
<input type="hidden" name="j_idt582:j_idt584" value="j_idt582:j_idt584">
[b]<script type="text/javascript">loadingBalance = function() {PrimeFaces.ab({source:'j_idt582:j_idt584:j_idt585',formId:'j_idt582:j_idt584',updateSelector:'@(.pre-balance-block, .payment-form)',async:true,onstart:function(cfg){loadingBalanceBlock.show();;},oncomplete:function(xhr,status,args){loadingBalanceBlock.hide(); try{ avaibleServices();}catch(e) {};},params:arguments[0]});};$(function() {loadingBalance();});</script>[/b]<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="747523851311306748:6362696473948308748" autocomplete="off">
</form>
Как его выполнить из BASH?
Делал так:
curl -k -i --raw -o 0.dat -X POST -d "javax.faces.partial.ajax=true&javax.faces.source=j_idt582%%3Aj_idt724%%3Aj_idt752&javax.faces.partial.execute=%%40all&javax.faces.partial.render=j_idt582%%3Aj_idt724+headerBalance+&j_idt582%%3Aj_idt724%%3Aj_idt752=j_idt582%%3Aj_idt724%%3Aj_idt752&j_idt582%%3Aj_idt724=j_idt582%%3Aj_idt724&javax.faces.ViewState=-1028883408476721569%%3A6254645381703189495" "https://my.beeline.ru/c/pre/index.html" -H "Host: my.beeline.ru" -H "Connection: keep-alive" -H "Accept: application/xml, text/xml, */*; q=0.01" -H "Origin: https://my.beeline.ru" -H "X-Requested-With: XMLHttpRequest" -H "User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36" -H "Faces-Request: partial/ajax" -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" -H "Referer: https://my.beeline.ru/c/pre/index.html" -H "Accept-Encoding: gzip,deflate" -H "Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4" -H "Cookie: GlobUserRegion=385; GlobUserRegionPath=mkl; GlobRegionAncestors=1%%7C384%%7C385; __utma=1.1726003945.1389105045.1389105045.1389105045.1; WT_FPC=id=ИП-418711440.30336735:lv=1389105046522:ss=1389105046522; usst=sjzUCw83FR; ui.language.current=ru_RU; SRV=WebNode26; WGID=mnWG2; _ym_visorc_20907550=b; _gat_UA-10061712-42=1; _gat_UA-10061712-32=1; _gat_UA-10061712-1=1; _ga=GA1.2.1726003945.1389105045; _gat_UA-10061712-37=1; JSESSIONID=g4O3l2qXNploAr0BvHLczPJLWBRluF8aCfkmcPLjQkGQok83EnzZ!-41650466; user_9674093113=9674093113; ticket=b5467ddcd44009ed5987a7fe626967e316bb0f9f; userType=B2C"
Результат нажатия кнопки обновить баланс в сервис гиде.
Файл 0.dat выглядит так:
HTTP/1.1 302 Moved Temporarily
Server: nginx/1.5.3
Date: Sun, 16 Nov 2014 08:01:57 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Location: http://my.beeline.ru/login.html
X-USS-SERVER-NAME: nWebNode16
X-Powered-By: Servlet/3.0 JSP/2.2
Set-Cookie: usst=JhY3XYexBd; domain=my.beeline.ru; path=/; secure; HttpOnly
Set-Cookie: SRV=WebNode16; path=/
Set-Cookie: WGID=mnWG1; path=/

103
<html><head><title>302 Moved Temporarily</title></head>
<body bgcolor="#FFFFFF">
<p>This document you requested has moved
temporarily.</p>
<p>It's now at <a href="http://my.beeline.ru/login.html">http://my.beeline.ru/login.html</a>.</p>
</body></html>

0
Как увидеть баланс?
 

Оффлайн Арсланали

  • Мир Вашему дому
  • Новичок форума
  • Topic Author
  • Сообщений: 8
  • Мир Вашему дому
Задача такая в общем:
Есть файл со списком номеров состоящего из двух колонок разделенных ";". В первой номер, а во второй пароль от личного кабинета(НОМЕР;ПАРОЛЬ).
Cкрипт (в данном случае мой на bash) должен выдергивать номер и пароль и заходить в личные кабинеты операторов вытаскивая инфу
НОМЕР - БАЛАНС в отдельный файл HTML(HTML будет лежать на сервере для всех желающих видеть баланс на номерах)
Ваш скрипт тоже не помешает.
Сам curl видит только скелет страницы динамику он не видит.
На билайне как раз таки баланс формируется динамически аяксом.
Ваш скрипт тоже не помешает.
« Последнее редактирование: 18 Декабрь 2014, 14:01:20 от Арсланали »
 

Оффлайн smallNix

  • Местный житель
  • ***
  • Сообщений: 129
Первый вопрос довольно частный. Не могу ничего подсказать, т.к. у меня не Билайн и я не могу проверить те вещи, которые стал бы советовать. По поводу второго сообщения - если файл с паролями лежит на сервере, то вопрос решается довольно просто (explode в php поможет), но генерировать файл html на сервере не стоит. С помощью php можно разбирать файл, а затем нужные данные передавать по запросу клиенту, с помощью JS добиваемся динамики в отображении информации, по необходимости работаем через AJAX.
Кто-то же должен что-то делать...
 

Оффлайн smallNix

  • Местный житель
  • ***
  • Сообщений: 129
P.S.: Я уже говорил ранее (в другой теме), что запускать башевский скрипт на сервере (если сервер не доступен Вам физически) не всегда возможно. Поэтому стоит от этого решения отказаться если нет в этом острой необходимости.
Кто-то же должен что-то делать...
 

Оффлайн Арсланали

  • Мир Вашему дому
  • Новичок форума
  • Topic Author
  • Сообщений: 8
  • Мир Вашему дому
Для Билайна пробовал, но там все сложнее оказалось. Баланс формируется аяксом.
_WARN=`echo $_RESPONSE | grep "messages-error"`
if [ "$_WARN" == "" ];
then
_BALANCE=`echo $_RESPONSE | egrep -o "<span class=\"price[^\"]?\">[^<]+<span[^>]+>" | sed -e 's@<[^>]*>@@g' -e 's@\s*@ @' -e 's@\ @ @g' -e 's@^\s*@@'`

if [ "$_BALANCE" != "" ];
then
echo "$_BALANCE" | sed -e 's@\..*@.@' -e 's@,@.@'
else
echo "Error: balance not avaible"
fi
else
echo "Error: incorrect login or password"
fi
Выдает "Error: balance not avaible", потому что баланс пуст.
К примеру fiddler выдал мне такой запрос
javax.faces.partial.ajax=true&javax.faces.source=j_idt582%3Aj_idt584%3Aj_idt585&javax.faces.partial.execute=%40all&javax.faces.partial.render=j_idt582%3AhomeBalance+&j_idt582%3Aj_idt584%...

Также fiddler позволяет выгружать сессии в bat файл.
Выгрузил и пробовал выполнить то что выгрузилось, но увы.
 

Русскоязычное сообщество Debian GNU/Linux



Теги: