Получение текста с интернет страницы.
Модератор: Модераторы
-
skobanev
- новенький
- Сообщения: 33
- Зарегистрирован: 24.02.2016 22:55:01
- Откуда: Ростов-на-Дону
- Контактная информация:
Получение текста с интернет страницы.
Добрый день. Тема скорее всего уже мусолилась и не раз, но Я ее что то не пойму.
Есть страница для принятия интернет оплаты (Тинькоф).
Чтобы ее получить, я открываю в браузере HTTPS страницу тинькова с параметрами. В ответ мне выводится текст, где есть ссылка на оплату.
Я стараюсь в собственную программу внедрить орткрытие данной ссылки, чтобы автоматом получить код.
НО !
Пару дней провел за мучениями. Пробовал ipHtmlPanel и Chromium (fpCef3). Кое как завел на Хромиуме, но мне совершенно не хочется добавлять в приложение еще полноценный браузер. Да и его настройка заставила меня немного попотеть, скачивая актуальные билды. Кроме того, необходимо еще держать дополнительные файлы на диске, что меня тоже не очень устраивает.
ipHTMLPanel я так и не смог завести даже на открытие страницы.
Подскажите пож самый простой способ решить данную задачу. И, Желательно еще пример.
Есть страница для принятия интернет оплаты (Тинькоф).
Чтобы ее получить, я открываю в браузере HTTPS страницу тинькова с параметрами. В ответ мне выводится текст, где есть ссылка на оплату.
Я стараюсь в собственную программу внедрить орткрытие данной ссылки, чтобы автоматом получить код.
НО !
Пару дней провел за мучениями. Пробовал ipHtmlPanel и Chromium (fpCef3). Кое как завел на Хромиуме, но мне совершенно не хочется добавлять в приложение еще полноценный браузер. Да и его настройка заставила меня немного попотеть, скачивая актуальные билды. Кроме того, необходимо еще держать дополнительные файлы на диске, что меня тоже не очень устраивает.
ipHTMLPanel я так и не смог завести даже на открытие страницы.
Подскажите пож самый простой способ решить данную задачу. И, Желательно еще пример.
- Снег Север
- долгожитель
- Сообщения: 3067
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
Re: Получение текста с интернет страницы.
Простого способа нет, увы. Chromium - самый надежный и совершенный, поскольку умеет выполнять джава-скрипты.
-
skobanev
- новенький
- Сообщения: 33
- Зарегистрирован: 24.02.2016 22:55:01
- Откуда: Ростов-на-Дону
- Контактная информация:
Re: Получение текста с интернет страницы.
Жаль. Надеялся, что лишних 100 метров обвеса не придется в прогу сувать.
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
Re: Получение текста с интернет страницы.
skobanev, если неохота, то, если есть доступ к коду страницы, можно тупо отпарсить текст на наличие ссылок и куда они ведут.
ЗЫ: А у банка точно нет официального API? Возможно, что все придумано до нас.
В последнее время в исходниках FPC появились странные файлы типа Pas2Js да и папочка javapp о чем-то говорит. Так что есть вероятность и обратного преобразования.
ЗЫ: А у банка точно нет официального API? Возможно, что все придумано до нас.
Снег Север писал(а):поскольку умеет выполнять джава-скрипты
В последнее время в исходниках FPC появились странные файлы типа Pas2Js да и папочка javapp о чем-то говорит. Так что есть вероятность и обратного преобразования.
- Снег Север
- долгожитель
- Сообщения: 3067
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
Re: Получение текста с интернет страницы.
Лекс Айрин писал(а):В последнее время в исходниках FPC появились странные файлы типа Pas2Js да и папочка javapp о чем-то говорит.
Это для мобильных приложений, скорее. Сомневаюсь, что так можно выполнить скрипты на вебстраницах.
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
Re: Получение текста с интернет страницы.
Снег Север, скорее всего.
Re: Получение текста с интернет страницы.
в принципе жабу "обходятЬ". Но с хромиум проще. Не охото хромиум - аквивекс в подмогу.
хм... Может шапку не верно посылаете, может сниферить глубже надо. В общем: старайтесь. Будут ссылки, код... авось помогут....Я стараюсь в собственную программу внедрить орткрытие данной ссылки, чтобы автоматом получить код.
-
MysticCoder
- постоялец
- Сообщения: 154
- Зарегистрирован: 14.09.2013 00:20:28
Re: Получение текста с интернет страницы.
Получить страницу - Synapse и через него выполняешь HTTP Get или Post запрос. Ну и SSL подрубить не забыть. Если код не скрыт за джава скриптом, то должно хватить. А потом распарсить.
Re: Получение текста с интернет страницы.
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;
-
skobanev
- новенький
- Сообщения: 33
- Зарегистрирован: 24.02.2016 22:55:01
- Откуда: Ростов-на-Дону
- Контактная информация:
Re: Получение текста с интернет страницы.
ЗЫ: А у банка точно нет официального API? Возможно, что все придумано до нас.
Через АПИ я все и делаю.
2 редиректа получается на странице у тинькофа.
Если Брать стандартную форму создания заказа, то там ссылка через яваскрипт идет. Я ушел от этого используя АПИ, чтобы можно было пост запросом делать. У них в описании, практически так и сказано, что есть запрос, выскакивает ссылка, которую и нужно показать клиенту.
Получить страницу - Synapse и через него выполняешь HTTP Get или Post запрос.
Вот сегодня сунапсом еще попробую. За пример спасибо большое. Как сделаю - отпишусь результат.
-
skobanev
- новенький
- Сообщения: 33
- Зарегистрирован: 24.02.2016 22:55:01
- Откуда: Ростов-на-Дону
- Контактная информация:
Re: Получение текста с интернет страницы.
В Общем сунапс помог. Только необходимо еще две 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;
Re: Получение текста с интернет страницы.
посмотри в режиме разработки, что браузер покажет.skobanev писал(а):Чтобы ее получить, я открываю в браузере HTTPS страницу тинькова с параметрами. В ответ мне выводится текст, где есть ссылка на оплату.
сама страница может иметь кучу ссылок, скрытых значений, куков и переходов, на уровне js может идти активный обмен.
