Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2017, 11:48   #11
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Сообщение от Ship_1 Посмотреть сообщение
Нормально грузится.... Почему же не грузится в idHTTP?..

Грузится страница авторизации. Внутри (если посмотреть в консоль браузера) та же 401 ошибка + ответ от сервера с ключами и HTML-разметкой отображаемой страницы.

В idHTTP ничего грузиться не должно, он обрабатывает запросы и ответы на уровне HTTP-протокола, однако средств визуализации HTML у него, как у браузера, нет и не должно быть.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 23.05.2017, 12:50   #12
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию

Спасибо за информацию. А как тогда докопаться до ответа сервера с ключами? В e.Message только сама ошибка...
Ship_1 вне форума Ответить с цитированием
Старый 23.05.2017, 14:20   #13
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

e.Message - это случайно не та, которая

Код:
try
...
except
  on E: Exception do
...
end;
Всё верно, там и должна быть мессага об ошибке, это же исключение. В ней никогда не будет возвращаемого текста.

Сам текст... ну можно, например, так (недавно писал для получения внешнего IP, выкиньте из кода все упоминания httpLogger, это тоже самописка):

Код:
function GetIPAddress(httpLogger: TServiceLogger): string;
var
  idHTTP: TIdHTTP;

begin

  idHTTP := nil;
  idHTTP := TIdHTTP.Create(nil);

  try

    httpLogger.WriteMessageToLog(lmtDebug, 'Попытка связаться с http://checkip.dyndns.org.');

    Result := IdHTTP.Get('http://checkip.dyndns.org');
    Result:=copy(Result, Pos(':', Result) + 2,20);
    Result:=copy(Result, 1, Pos('<', Result) - 1);

    httpLogger.WriteMessageToLog(lmtDebug, 'Попытка связи успешна!');

  except
    on E: Exception do
    begin

      httpLogger.WriteMessageToLog(lmtError, 'Попытка связи неуспешна! Причина:');
      httpLogger.WriteMessageToLog(E.Message);
      httpLogger.WriteEmptyStringToLog();

      Result := '';

    end; // except

  end; // try ... except

  FreeAndNil(IdHTTP);

end; // GetIPAddress
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 23.05.2017, 14:55   #14
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию

Но, если я правильно понимаю, если выкинуть все httpLogger, то и получится примерно так как раз:
Код:
  try
  TmpStrL.Text:=IdHTTP1.Get('https://login.mts.ru/amserver/UI/Login');
  except on e:Exception do ShowMessage(e.ToString);
  end;
Программа в Get получает ошибку и уходит в except...
Ship_1 вне форума Ответить с цитированием
Старый 23.05.2017, 15:00   #15
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

А, вон оно как...

только сейчас обратил внимание, что Вы по idHTTP подключаетесь на HTTPS-адрес. А это значит, что нужно подключать SSLHandler.

Ссыль в помощь
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 23.05.2017, 15:13   #16
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию

Да я, вроде, подключил и IdSSLIOHandlerSocketOpenSSL1, и IdCookieManager1. Поэтому без
Код:
  IdHTTP1.Request.Accept:='text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8';
  IdHTTP1.Request.AcceptEncoding:='gzip, deflate, sdch, br';
  IdHTTP1.Request.AcceptLanguage:='ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4';
  ....
  и т.п. см. #7
у меня что-то грузится. Веб-сообщение об ошибке ) (Request Error) А с этим кодом сообщение об ошибке выдаётся программой
Ship_1 вне форума Ответить с цитированием
Старый 26.05.2017, 15:13   #17
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию

Столько профессионалов на форуме, неужели никто не может помочь с проблемой?...
Ship_1 вне форума Ответить с цитированием
Старый 26.05.2017, 22:24   #18
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Сообщение от Ship_1 Посмотреть сообщение
Столько профессионалов на форуме, неужели никто не может помочь с проблемой?...
Честно говоря, я начал было разбираться, но текущие дела отвлекли и закрутили

Единственное, что успел узнать: оказывается, если получить данную ошибку в дельфях - то потом и в браузере страница авторизации минут на пять становится недоступна.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 28.05.2017, 18:12   #19
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Вот через synaps тоже получает метод только делать HTTP запрос
Код:
procedure TForm1.Button3Click(Sender: TObject);
var
pList : TStringList;
httpsend: THTTPSend;
begin
 pList:= TStringList.Create;
 httpsend:=THTTPSend.Create;
 try
  httpsend.Protocol := '1.1';
  httpsend.UserAgent:=
  'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '+
  'Chrome/56.0.2924.87 Safari/537.36 OPR/43.0.2442.1144 (Edition Yx)';
    httpsend.Headers.Add('Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8');
    httpsend.Headers.Add('Accept-Language: en-US,en;q=0.5');
    httpsend.HTTPMethod('get','http://login.mts.ru/amserver/UI/Login');
    pList.LoadFromStream(httpsend.Document);

    // Результат
    memo1.Text:= UTF8ToAnsi(pList.Text);
 finally
 pList.free;
 httpsend.free;
end;
end;
Должны получить ответ метода запроса примерно такой
Цитата:
<html><head><meta http-equiv="Pragma" content="no-cache"><meta http-equiv="Expires" content="-1"><meta http-equiv="Cache-Control" content="no-cache,no-store,must-revalidate"><title>Wait for redirect</title></head>
<body onload="document.getElementById('fo rm').submit()">
<form id="form" action="https://login.mts.ru/amserver/UI/Login" method="post">
<input type="hidden" name="csrf.sign" value="1647a34ff500f2204d0695d51002 f1c75beb1ba09fd555688e5af8318904b14 a"/><input type="hidden" name="csrf.ts" value="1498881332544"/></form></body></html>
Ну а дальше нужно Post запрос делать с номером, паролем и инфой полученной страницы метода
Почитайте про методы Post запросов, тогда получиться сделать нужный запрос

Последний раз редактировалось Aliens_wolfs; 28.05.2017 в 20:55.
Aliens_wolfs вне форума Ответить с цитированием
Старый 29.05.2017, 15:28   #20
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию

Пытался давно обойтись без Synapse, но всё же тут решил попробовать хоть так получить нужные цифры.
Получилось...
Но как двинуться дальше по этому пути - никак не могу понять... Пытаюсь наяндексить synapse post - вылезает преимущественно работа с почтой, причём видео...
Нашёл что-то, из этого чего-то сделал вот это
Код:
procedure TForm1.Button3Click(Sender: TObject);
var stream: TStringStream;
    httpsend: THTTPSend;
    TmpStrList2:TStringList;
begin
  TmpStrList2:=TStringList.Create;
  stream:=TStringStream.Create('');
  stream.WriteString('IDToken2='+Edit2.Text+'&amp;IDButton=Submit&amp;IDToken1='+Edit1.Text+
                      '&amp;encoded=false&amp;loginURL=/amserver/UI/Login?gx_charset=UTF-8'+
                      '&amp;csrf.sign='+Label1.Caption+'&amp;csrf.ts='+Label2.Caption);
  httpsend:=THTTPSend.Create;
  httpsend.Protocol := '1.1';
  httpsend.UserAgent:=
       'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '+
       'Chrome/56.0.2924.87 Safari/537.36 OPR/43.0.2442.1144 (Edition Yx)';
  httpsend.Headers.Add('Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8');
  httpsend.Headers.Add('Accept-Language: en-US,en;q=0.5');
  httpsend.MimeType:='application/x-www-form-urlencoded';
  httpsend.Document.LoadFromStream(stream);
  if httpsend.HTTPMethod('post','https://login.mts.ru/amserver/UI/Login?service=lk&goto=https://lk.ssl.mts.ru/' ) then
    begin
      TmpStrList2.LoadFromStream(httpsend.Document);
      ShowMessage(TmpStrList2.Text);
    end;
  TmpStrList2.Free;
end;
Но штука не показывает никакого ShowMessage, и как от неё добиться чего-то ещё я понять не могу.
Нашёл я, конечно, одну познавательную статью, при времени почитаю её, но чёткого ответа, думаю, она мне тоже не даст, а уж прямого я точно не вижу.
Может, кто-то подскажет как дальше пробиться в МТС?
Или поможет побороть, всё же, idHTTP. Может, он и более кривой, но как-то более освещён в интернете.
Sciv, я тоже заметил, что пропадает на время возможность авторизации. Интересный эффект
Ship_1 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Может кто объяснить что происходит в этих двух строках. pompiduskus Общие вопросы C/C++ 7 01.11.2015 00:42
Что означает void setup, кто может объяснить, напишите(((((( yulja-uk Помощь студентам 1 21.12.2011 10:58
Кто нибудь может объяснить почему это так? Fedor111 Общие вопросы C/C++ 1 24.09.2011 20:12
кто может объяснить??? Надежда Карунова Помощь студентам 1 25.11.2010 17:38
дойти не может что к чему if-soft Паскаль, Turbo Pascal, PascalABC.NET 7 07.10.2008 10:45