Получение текста с интернет страницы.

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Получение текста с интернет страницы.

Сообщение skobanev » 17.12.2018 18:15:38

Добрый день. Тема скорее всего уже мусолилась и не раз, но Я ее что то не пойму.
Есть страница для принятия интернет оплаты (Тинькоф).
Чтобы ее получить, я открываю в браузере HTTPS страницу тинькова с параметрами. В ответ мне выводится текст, где есть ссылка на оплату.
Я стараюсь в собственную программу внедрить орткрытие данной ссылки, чтобы автоматом получить код.
НО !
Пару дней провел за мучениями. Пробовал ipHtmlPanel и Chromium (fpCef3). Кое как завел на Хромиуме, но мне совершенно не хочется добавлять в приложение еще полноценный браузер. Да и его настройка заставила меня немного попотеть, скачивая актуальные билды. Кроме того, необходимо еще держать дополнительные файлы на диске, что меня тоже не очень устраивает.

ipHTMLPanel я так и не смог завести даже на открытие страницы.

Подскажите пож самый простой способ решить данную задачу. И, Желательно еще пример.
skobanev
новенький
 
Сообщения: 33
Зарегистрирован: 24.02.2016 23:55:01
Откуда: Ростов-на-Дону

Re: Получение текста с интернет страницы.

Сообщение Снег Север » 17.12.2018 18:53:25

Простого способа нет, увы. Chromium - самый надежный и совершенный, поскольку умеет выполнять джава-скрипты.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: Получение текста с интернет страницы.

Сообщение skobanev » 17.12.2018 19:33:43

Жаль. Надеялся, что лишних 100 метров обвеса не придется в прогу сувать.
skobanev
новенький
 
Сообщения: 33
Зарегистрирован: 24.02.2016 23:55:01
Откуда: Ростов-на-Дону

Re: Получение текста с интернет страницы.

Сообщение Лекс Айрин » 17.12.2018 20:26:40

skobanev, если неохота, то, если есть доступ к коду страницы, можно тупо отпарсить текст на наличие ссылок и куда они ведут.

ЗЫ: А у банка точно нет официального API? Возможно, что все придумано до нас.

Снег Север писал(а):поскольку умеет выполнять джава-скрипты


В последнее время в исходниках FPC появились странные файлы типа Pas2Js да и папочка javapp о чем-то говорит. Так что есть вероятность и обратного преобразования.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Получение текста с интернет страницы.

Сообщение Снег Север » 17.12.2018 22:34:00

Лекс Айрин писал(а):В последнее время в исходниках FPC появились странные файлы типа Pas2Js да и папочка javapp о чем-то говорит.

Это для мобильных приложений, скорее. Сомневаюсь, что так можно выполнить скрипты на вебстраницах.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: Получение текста с интернет страницы.

Сообщение Лекс Айрин » 17.12.2018 22:42:25

Снег Север, скорее всего.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Получение текста с интернет страницы.

Сообщение pupsik » 17.12.2018 23:04:04

в принципе жабу "обходятЬ". Но с хромиум проще. Не охото хромиум - аквивекс в подмогу.

Я стараюсь в собственную программу внедрить орткрытие данной ссылки, чтобы автоматом получить код.
хм... Может шапку не верно посылаете, может сниферить глубже надо. В общем: старайтесь. Будут ссылки, код... авось помогут....
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Получение текста с интернет страницы.

Сообщение MysticCoder » 17.12.2018 23:20:27

Получить страницу - Synapse и через него выполняешь HTTP Get или Post запрос. Ну и SSL подрубить не забыть. Если код не скрыт за джава скриптом, то должно хватить. А потом распарсить.
MysticCoder
постоялец
 
Сообщения: 154
Зарегистрирован: 14.09.2013 00:20:28

Re: Получение текста с интернет страницы.

Сообщение sign » 18.12.2018 07:06:51

skobanev писал(а):Добрый день. Тема скорее всего уже мусолилась и не раз, но Я ее что то не пойму.
Есть страница для принятия интернет оплаты (Тинькоф).
Чтобы ее получить, я открываю в браузере HTTPS страницу тинькова с параметрами. В ответ мне выводится текст, где есть ссылка на оплату.
Я стараюсь в собственную программу внедрить орткрытие данной ссылки, чтобы автоматом получить код.

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

Код: Выделить всё
uses httpsend;

function IDDeleted(ID: String; var Del: String; Panel: TIpHtmlPanel): Integer;
var HTTPDel: THTTPSend;
const ldReferer= 'http://78.xxx.xxx.xx/xxx/';
      ldTestDeleted = '%spartner_delete_client.asp?sessionid=%s';
var D: THttpData;
    SC: String;
    SSID: String;
    i, j: PtrInt;
begin
  Result := -1;
  HTTPDel := THTTPSend.Create;
  try
    D.LoginData := 'Username=xxxxxxxxx&Password=xxxxxxxxxxxx&id=1&pincode=xxxxx';
    D.UserAgent := 'Mozilla/5.0 (Windows NT 5.1; rv:29.0) Gecko/20100101 Firefox/29.0';
    D.TargetHost := '78.xxx.xxx.xx';
    if not D.Post(HTTPDel, ldReferer + 'login_post.asp') then Exit;
    SSID := http_SessionID(HTTPDel, Panel);
    SC := '';
    if http_GetPage(HTTPDel, Format(ldTestDeleted, [ldReferer, SSID]), Panel, SC) then begin
      if Assigned(Panel) then Panel.SetHtmlFromStr('  ');
      D.LoginData := 'data_id='+ID+'&mode_id=val_mode_id&sessionid='+SSID+'&par_records=1&tab_id=2';
      if D.Post(HTTPDel, Panel, ldReferer + 'partner_delete_client.asp', SC) then begin
        // Проверка на то, что человек удалён
        i := UTF8Pos('дистрибьютор сейчас в структуре', SC);
        if i > 0 then begin
          Del := 'Этот дистрибьютор сейчас в структуре';
          Exit(0);
        end;
        i := UTF8Pos('дистрибьютор сейчас не находится в структуре', SC);
        if i > 0 then begin
          Del := 'Этот дистрибьютор'#13'сейчас'#13'НЕ находится в структуре';
          Exit(2);
        end;
        i := UTF8Pos('>Удален', SC);
        if i > 0 then begin
          j := UTF8Pos('</font>', SC, i);
          Del := UTF8Copy(SC, i+1, j-i-1);
          Exit(1);
        end;
      end;
    end;
  finally
    HTTPDel.Free;
  end;
end;

function http_SessionID(http: THTTPSend; Panel: TIpHtmlPanel): String;
var L: TStringList;
    SC: String;
  function http_S(const S: String): String;
  const SS1 = 'view_documents.asp?sessionid=';
        SS2 = '&par_scheme_id';
  var k1, k2: Integer;
  begin
    k1 := UTF8Pos(SS1, S);
    if k1 > 0 then begin
      k2 := UTF8Pos(SS2, S, k1);
      if k2 > k1 then begin
        k1 := k1 + UTF8Length(SS1);
        Result := UTF8Copy(S, k1, k2-k1);
      end else Result := '';
    end else Result := '';
  end;
begin
  L := TStringList.Create;
  Result := '';
  try
    L.LoadFromStream(http.Document);
    SC := AnsiToUtf8(L.Text);
    if Assigned(Panel) then Panel.SetHtmlFromStr(SC);
    Result := http_S(SC);
  finally
    L.Free;
  end;
end;

function http_GetPage(http: THTTPSend; const URL: String; Panel: TIpHtmlPanel; var SC: String): Boolean;
var L: TStringList;
begin
  L := TStringList.Create;
  Result := False;
  try
    http.Headers.Clear;
    if http.HTTPMethod('get', URL) then begin
      L.LoadFromStream(http.Document);
      SC := L.Text;
      if Assigned(Panel) then Panel.SetHtmlFromStr(SC);
      Result := True;
    end;
  finally
    L.Free;
  end;
end;

sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Получение текста с интернет страницы.

Сообщение skobanev » 18.12.2018 09:33:14

ЗЫ: А у банка точно нет официального API? Возможно, что все придумано до нас.

Через АПИ я все и делаю.
2 редиректа получается на странице у тинькофа.

Если Брать стандартную форму создания заказа, то там ссылка через яваскрипт идет. Я ушел от этого используя АПИ, чтобы можно было пост запросом делать. У них в описании, практически так и сказано, что есть запрос, выскакивает ссылка, которую и нужно показать клиенту.

Получить страницу - Synapse и через него выполняешь HTTP Get или Post запрос.

Вот сегодня сунапсом еще попробую. За пример спасибо большое. Как сделаю - отпишусь результат.
skobanev
новенький
 
Сообщения: 33
Зарегистрирован: 24.02.2016 23:55:01
Откуда: Ростов-на-Дону

Re: Получение текста с интернет страницы.

Сообщение skobanev » 20.12.2018 10:16:56

В Общем сунапс помог. Только необходимо еще две DLL в каталог программы переписать и все работает. libeay32.dll и ssleay32.dll
Код: Выделить всё
uses ... httpsend, ssl_openssl
...

procedure TForm1.Button1Click(Sender: TObject);
var
  HTTPS: THTTPSEND;
  HTML: TStringList;
begin
  https:=thttpsend.Create;
  HTML:= TStringList.Create;

  httpgettext('https:// .... /?...&...&...', html);

  Memo1.Lines.Add(HTML.Text);
  Memo1.Lines.Add('');
  Memo1.Lines.Add(https.ResultCode.ToString);
  Memo1.Lines.Add(https.ResultString);
  Memo1.Lines.AddStrings(https.Headers);
  https.Clear;
  ...
  Html.Clear;
end;         
skobanev
новенький
 
Сообщения: 33
Зарегистрирован: 24.02.2016 23:55:01
Откуда: Ростов-на-Дону

Re: Получение текста с интернет страницы.

Сообщение olegy123 » 20.12.2018 13:59:54

skobanev писал(а):Чтобы ее получить, я открываю в браузере HTTPS страницу тинькова с параметрами. В ответ мне выводится текст, где есть ссылка на оплату.
посмотри в режиме разработки, что браузер покажет.
сама страница может иметь кучу ссылок, скрытых значений, куков и переходов, на уровне js может идти активный обмен.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 29

Рейтинг@Mail.ru