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

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

Вернуться   Форум программистов > Delphi программирование > Lazarus, Free Pascal, CodeTyphon
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.02.2017, 15:03   #1
arriah
Пользователь
 
Регистрация: 09.08.2015
Сообщений: 62
По умолчанию synapse

Привет всем,

Использую библиотеку synapse в лазаре, возникли некоторые вопросы.

httpsend ('GET','site.ru') - получаю страничку. Далее распарсиваю ее для нахождения ссылок на изображения. Потом полученный текст вставляю в tchromium. Все работает, за исключением некоторых сайтов.

Например с одного сайта показываются не все картинки, или не показываются вовсе. Думал глюк на сайте - захожу в браузер - все нормально. Загружаю в tchromium url сайта - тоже все нормально.

Вот код:
Код:
  HTTP:=THTTPSend.Create;
  HTTP.KeepAlive:=true;
  HTTP.KeepAliveTimeout:=300;
  HTTP.TargetPort:='80';
  HTTP.Protocol:='1.1';
  //HTTP.Cookies.Text:=memCookie.Text;
  //HTTP.Headers.Insert(0,'Referer: '+referer);
  HTTP.UserAgent:='Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36';

  HTTP.HTTPMethod('GET',site_link);

  {далее парсим страницу и вытаскиваем ссылки на изображения}

Chromium1.Browser.MainFrame.LoadString(TempStr,'http://localhost');
В TempSTR текст вида <img src="ссылка на изображение" />

Но с некоторых сайтах картинки не показываются, смотрел заголовки ответов - пишет 403.

Но если допустим, моим кодом получить ссылки на изображения с сайта site.ru - картинки не показываются. А если зайти с браузера на этот сайт - там все нормально, и после захода в браузер, картинки начинают показываться и после моего кода.

прбовал и реферера подменять и куки отправлять - бестолку.

В чем может быть еще проблема?
Завидую крокодилам! Они даже ходят лежа!
arriah вне форума Ответить с цитированием
Старый 28.02.2017, 21:45   #2
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

к этому сайту нужно SSL запрос делать так
HTTPMethod('GET','https://site.ru');
и в ссылках на изображение тоже делать запрос https
Здесь много примеров на тему SSL

вот рабочий код:
Код:
uses
......... ssl_openssl, HTTPSend;

procedure TForm1.Button1Click(Sender: TObject);
var
pList : TStringList;
httpsend: THTTPSend;
begin
 pList:= TStringList.Create;
 httpsend:=THTTPSend.Create;
 try
  httpsend.Protocol := '1.1';
  httpsend.UserAgent:=
   'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36';
  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.Headers.Add('Connection: keep-alive');
    httpsend.Sock.CreateWithSSL(TSSLOpenSSL);
    httpsend.Sock.SSLDoConnect;
    httpsend.HTTPMethod('get','https://site.ru');
    pList.LoadFromStream(httpsend.Document);
    // для получения страницы
     Memo1.Lines.Add(pList.Text); 

 finally
 pList.free;
 httpsend.free;
end;
end;
Если вы в Lazarus из под Windows работаете и страница приходит пустой, то можно попробовать обновить файлы libeay32.dll и ssleay32.dll для таких запросов и вложить в папку с вашим проектом
от сюда
https://drive.google.com/file/d/0B0P...czRzJtbWM/view

Последний раз редактировалось Aliens_wolfs; 01.03.2017 в 09:07.
Aliens_wolfs вне форума Ответить с цитированием
Старый 03.03.2017, 13:44   #3
arriah
Пользователь
 
Регистрация: 09.08.2015
Сообщений: 62
По умолчанию

Спасибо, попробую.
Но дело в том, что "проблемные" сайты не SSL, да и в site_link передается уже нужный протокол (http или https)..
а линки на изображения беру из исходников самого сайта.. там по разному, бывает SSL бывает без оного.

За библиотеки отдельное спасибо, а то у меня старые)
Завидую крокодилам! Они даже ходят лежа!
arriah вне форума Ответить с цитированием
Старый 03.03.2017, 21:30   #4
arriah
Пользователь
 
Регистрация: 09.08.2015
Сообщений: 62
По умолчанию

Вопрос решился банально просто

У меня в коде
Код:
Chromium1.Browser.MainFrame.LoadString(TempStr,'http://localhost');
Вторым параметром прописан локал хост. Оказывается (ну вот чесслово не знал) что второй параметр передает реферера на сайт, переписал так:

Код:
Chromium1.Browser.MainFrame.LoadString(TempStr,site_link);
И все стало хорошо
Завидую крокодилам! Они даже ходят лежа!
arriah вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Synapse MaximusRS Работа с сетью в Delphi 0 06.06.2016 14:06
IMAP Synapse nibufep Общие вопросы Delphi 3 22.12.2014 20:01
Synapse. HTTPSend Nugrom Общие вопросы Delphi 7 22.09.2014 22:19
Synapse. Авторизация ВК Afftar Работа с сетью в Delphi 10 18.05.2012 15:33
Synapse FanRa3 Общие вопросы Delphi 1 09.12.2010 21:06