synapse40 взять тело страницы https:

Форум для изучающих FPC и их учителей.

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

synapse40 взять тело страницы https:

Сообщение fill-forty » 30.01.2021 04:40:21

Добрый день.
Долго выбирал разделы между "программированием" и "Обучением".
Выбрал это.
Если тема будет удачной, то это поможет многим в дальнейшем.
Стоит задача. На первый взгляд простая. Взять тело страницы.
Почитал интернет. Везде описывается одно и тоже. До слёз просто и всем так понятно, что дальше никто не описывает.

А заключается в следующем: Скачиваем компонент synapse. (там отдельные танцы. многие не знают как его влепить, и я тоже каждый раз его компилирую, чтобы он у меня заработал в новом проекте)
Потом в обработчик кнопки вставляем это:

Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
  var hs:thttpsend;
    str:TStringList;
  begin
   hs:= THTTPSend.Create;
   str:= TStringList.Create;

   hs.HTTPMethod('Get', 'http://чтото там.com');
   hs.MimeType:='application/x-www-form-urlencoded';

   str.LoadFromStream(hs.Document);
   str.Add(inttostr(hs.ResultCode )) ;
   Memo1.Clear;
   Memo1.Lines.AddStrings(str);
    end;           



И но вот в МЕМО вся старница как есть. Однако, если мы захотим получить страницу HTTPS:/ то все гуру мастера говрят: - для этот вам МОЖЕТ понадобится openssl. и живенько так исчезают.
Это мифическое OPENSSL на разных сайтах упоминалось в виде Отдельной библиотеки, которую можно просто кинуть с экзешником и прога начинала дико хохохча выплевывать листинги сайтов, а до этого тупо мигала курсором МЕМО.
В другом месте человек проломил головой стену, пытаясь понять почему не работает. Однако в панике удалил из одной папки библиотеки майкрософт, ещё какую-то, и о чудо все завелось. (почему я не уделяю этому внимания? потому что этой библиотеки я вообще не нашел).
Третьи предлагали установить её в систему - что дико не удобно и не подходит.
Однако в uses можно прописать openssl и ошибки не будет. значит она уже встроена в тело программы, и парится по этому не надо.

Четвертый - на пол километра описывет возможности synapse. И по ходу его вобще не волнует проблема https оказывается надо просто насобирать море куков кудато в стринглист, а программа сама поймет когда и куда их отправить, чтобы получить тело документа.
И НИ ОДИН не показал рабочий вариант.

Вот для этого мы и собрались тут.
А теперь вопрос знатокам.
1) Как настроить лазарус, чтобы все компоненты были в рабочем состоянии, не конфликтовали итд.
2) что нужно прописать в юзес
3) какой код вписать в обработчик, чтобы в мемо наконец-то получить тело страницы хотябы яндекса.

С уважением.
Последний раз редактировалось fill-forty 30.01.2021 21:27:26, всего редактировалось 1 раз.
fill-forty
новенький
 
Сообщения: 25
Зарегистрирован: 07.12.2009 20:53:49

Re: synapse40 взять тело страницы htts:

Сообщение DYUMON » 30.01.2021 05:18:24

добавить в uses fphttpclient и попробуй, HTTPS тоже срабатывает
Аватара пользователя
DYUMON
постоялец
 
Сообщения: 234
Зарегистрирован: 11.03.2009 13:32:54

Re: synapse40 взять тело страницы htts:

Сообщение Снег Север » 30.01.2021 06:48:55

Windows или Linux? В винде скачиваешь два файлика последней версии - libeay32.dll и ssleay32.dll, кладешь рядом с экзешником своей программы, а в uses добавляешь openssl. И вся работает. В линухах танцуешь с бубном - тут я не подсказчик, но если станцевал успешно, то тоже всё работает. Никаких настроек в лазаре нет и не нужно.
ЗЫ. Бинарники берутся по ссылкам тут: https://wiki.openssl.org/index.php/Binaries
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3039
Зарегистрирован: 27.11.2007 16:14:47

Re: synapse40 взять тело страницы htts:

Сообщение Vadim » 30.01.2021 15:34:42

Я бы тоже посоветовал не особо заморачиваться с Synapse, поскольку есть хорошо работающий собственный клиент - fphttpclient. Я в позапрошлом году делал сервер, который должен общаться с веб-сервером, так он нормально работает и с HTTP и с HTTPS.
В Uses нужно подключить: fphttpclient, ssockets, opensslsockets. Последние два нужны для работы с библиотекой OpenSSL и ссылками типа HTTPS. Далее всё довольно просто, приведу небольшой примерчик:
Код: Выделить всё
{ Получение тарифа в зависимости от типа посетителя с веб-ирбиса.
  Входные параметры:
    - tp - тип читателя.
  Выходное значение:
    - Result.Values['TRF'] - тариф, Руб.Коп }
function TServer.GetTarif(tp: string): TStringList;
Var
  Post: TFPHTTPClient;
  Params : TStringList;

begin
  Post  :=TFPHTTPClient.Create(Nil);
  Params:=TstringList.Create;
  Result:=TstringList.Create;

  Params.Add('C21COM=F');
  If tp='ПЕНС' Then
    // Льготный тариф
    Params.Add('I21DBN=RDR_T8')
  else
    // Платный тариф
    Params.Add('I21DBN=RDR_T300');

  Try
    Post.FormPost(FUrl, Params, Result);
  Except
    on E: Exception do
      ToLog('Web-Irbis, request tarif: '+E.Message, ttmError);
  End;

  Params.Free;
  Post.Free;
end;

Естественно должна быть доступна библиотека OpenSSL. ;-) Причём, как выяснилось в ходе практической работы, модуль opensslsockets, который входит в комплект FPC версии 3.2 и ниже, не работает с OpenSSL версии 1.1 (это современная на сегодняшний день, например, идёт в комплекте с Ubuntu), поэтому этот модуль нужно брать из транковой версии FPC 3.3. Если же версия OpenSSL ниже, то работает opensslsockets из 3.2 и 3.0.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: synapse40 взять тело страницы htts:

Сообщение Alex2013 » 30.01.2021 15:53:34

Недавно набредал ... Stunnel SSL оболочка работающая поверх любого сервера. (Типа локального https прокси )
https://www.download3k.ru/Set/Sredstva- ... unnel.html
https://habr.com/ru/post/247167/


И в нагрузку ...
https://smallsrv.com/indexr.htm
https://www.uwamp.com/en/?page=download
(Последний сервак хорош тем что полностью модульный и модули можно честно "прихватизировать" в свой проект )
Зы
А показать что угодно умеет обычный CEF4Delphi
https://github.com/salvadordf/CEF4Delphi
Alex2013
долгожитель
 
Сообщения: 3049
Зарегистрирован: 03.04.2013 11:59:44

Re: synapse40 взять тело страницы https:

Сообщение fill-forty » 30.01.2021 22:37:23

Не зря я выбрал ветку "Обучение".
Мне очень приятно, что на форуме есть очень отзывчивые люди, но такой уровень "простоты" для меня неподъёмен. Чувствую себя бамбуком).

Очень благодарен "снегу северу" за имена фалов, я их скачал по поиску, так как SVN-овские ресурсы это ещё тот лабиринт где кроме потерянного времени найти нельзя. и архивы не содержащие искомого, или уже преименованные до не узнаваемости. Но всё равно спасибо. К сожалению не заработало.

Спасибо "Vadim"-у, услышал что есть fphttpclient. Потрачу на его ознакомление ещё пару недель. Странно, почему о нем не знал раньше? К сожалению, от небольшого простого примерчика у меня что-то задымилось в голове. И кажется я забыл когда у меня день рождение)). Но всё равно приятно.

Алексу2013 особая благодарность за "нагрузку" к сожалению, она не дошла до уже обугленного мозга.

Но точно я понят одно! Технологии на столько усложнились, что нельзя вот так взять и скачать из инета сраницу Яндекса по https.

Давайте попробуем снова. Представьте что пред вами курпич, который всю жизнь программировал закрытые системы, где данные поступали для обработки максимум от фалов в ОC, ита виндовс. Или через руки оператора. Кирпич, который только один раз попытался узнать как же копирнуть что-то в буфер, и даже ОДИН раз от туда достал, в полне не поврежденным. Кирпич, который только недавно столкнулся с проблемами протокола UART, и так ему и не удалось освоить "comportLaz" так как он сам по себе написан криво и пропускает пакеты и очень не стабилен на некоторых ОС, но особо умные прогеры все таки могут его закостылить и он работает!!! Так вот, уровень мой недотягивает до таких костыльщиков.
Представили?
Цель темы такова. Создать нормальную вводную для освоения получения страницы для людей, у которых мозги не заточены под динамический обмен данными, широкими знаниями подключений пакетов, знанием каких-то "сокетов" и карусели из куков, собиранием из разных источников криптобиблиотек, увязыванием их в одну полуживую кучу....
Хочется создать красивые условия для знакомства с сферой обращения информацией, чтобы вхождение в нее было мягким и интересным. Чтобы будущие мытари зайдя сюда почитали и сказали себе - О! да это просто! И для этого есть вполне нормальные условия.

Ситуация проста. Нужно сделать программу с одной кнопкой и МЕМО, носимая и запускаемая с флешки. При нажатии на кнопку, она загружает тело стартовой станицы Яндекс в мемо.
Всё.

И как Это сделать?
1) создаём проект ПУСТОЙ! Кидаеи туда МЕМО, и Button.
2) затем, чтобы обмен информацией с сайтом был корректен нам надо:
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,Установить.... что установить? synser? Нет? Ничего не надо? Хватит и fphttpclient?
Давайте определимся с основой, если кто-то из сайта разбирается в этом, мы можем здесь создать неплохую вводную. C него знания, с меня шишки и финальное оформление темы.
С уважением.

Добавлено спустя 3 часа 27 минут 32 секунды:
http://lazplanet.blogspot.com/2019/03/h ... -ways.html
Там есть ТРИ рабочих примера как получить страницу. Золотой пост. Нигде такого нормального описания не встречал! Памятник автору надо поставить! ДВА памятника)).
Всем кто устал биться головой о стену заходите и будет вам счастье.
Тему можно закрывать.
fill-forty
новенький
 
Сообщения: 25
Зарегистрирован: 07.12.2009 20:53:49

Re: synapse40 взять тело страницы https:

Сообщение xdsl » 15.02.2021 10:25:13

Если под линуксом, достаточно такого:
Код: Выделить всё
uses fphttpclient,opensslsockets;
begin
writeln(TFPHTTPClient.simpleGet('https://yandex.ru/'));
end.
xdsl
постоялец
 
Сообщения: 131
Зарегистрирован: 15.01.2009 13:49:03


Вернуться в Обучение Free Pascal

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

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

Рейтинг@Mail.ru