Мониторинг баланса сотового оператора на BASH

Автор Арсланали, 16 ноября 2014, 20:04:35

« назад - далее »

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

Арсланали

Здравствуйте.
Фрагмент кода который должен выдергивать баланс на Билайне:

#!/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

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

Арсланали

#1
Задача такая в общем:
Есть файл со списком номеров состоящего из двух колонок разделенных ";". В первой номер, а во второй пароль от личного кабинета(НОМЕР;ПАРОЛЬ).
Cкрипт (в данном случае мой на bash) должен выдергивать номер и пароль и заходить в личные кабинеты операторов вытаскивая инфу
НОМЕР - БАЛАНС в отдельный файл HTML(HTML будет лежать на сервере для всех желающих видеть баланс на номерах)
Ваш скрипт тоже не помешает.
Сам curl видит только скелет страницы динамику он не видит.
На билайне как раз таки баланс формируется динамически аяксом.
Ваш скрипт тоже не помешает.

smallNix

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

smallNix

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

Арсланали

Для Билайна пробовал, но там все сложнее оказалось. Баланс формируется аяксом.

_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 файл.
Выгрузил и пробовал выполнить то что выгрузилось, но увы.