Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Connection Closed Gracefully на http.get(url_) / 6 сообщений из 6, страница 1 из 1
10.07.2020, 21:52
    #39978302
ksfhsuej1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection Closed Gracefully на http.get(url_)
Доброго времени ув. знатоки и иже с ними! Писал парсер с сайта объявлений cian.ru.
Сделал даже полный аналог фильтра для поиска с самого сайта (покупка\продажа\комнаты и тд).
Поначалу прекрасно парсил даже и в 10 и в 100 потоков. Прикрутил каждую страницу к одному thread.
Но счастье, как грится, было недолгим - "Connection Closed Gracefully".

Теперь эта, с позволения сказать, - ошибка вылетает сразу, не дает спарсить даже 1 страницу, т.е результат начисто по-нулям.
Парсил через TIdHTTP.GET(url)/ Пробовал менять и "user agent" в самом компоненте, включал и глоб.прокси через VPN в пр-ме Phsiphon, безрезультатно.
Понятно, что эта чисто внешняя "загрушка" со стороны самого сервера cian.ru..
Полный нуб в этом вопросе, подскажите пож. куда копать, уж очень долго писал етот парсер ))))

Процедура запуска для потока:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
procedure MThread.Execute;
var http:TIdHTTP;
    ssl: TIdSSLIOHandlerSocketOpenSSL; s:string;
begin
  inherited;

  try
  http:= TIdHTTP.create(nil);
  ssl:=  TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  try
  with ssl do
  begin
     SSLOptions.Mode:= sslmUnassigned;
     SSLOptions.Method := sslvSSLv23;
  end;

  with http do
  begin
    //Response.KeepAlive:= true;
    Request.UserAgent:= 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.9) Gecko/20100101 Goanna/4.6 Firefox/68.9 PaleMoon/28.10.0';

    AllowCookies:=    true;
    HandleRedirects:= true;
    HTTPOptions:=    [hoForceEncodeParams];
    RedirectMaximum:= 100;
    ProxyParams.BasicAuthentication:= false;
    IOHandler:= ssl
  end;

  page:= http.get(url_); // тот самый, ранее сформированый в интерфейсе URL

  finally
    ssl. free;
    http.free;
  end;


  except
  // Здесь с некоторых пор имеем "Connection Closed Gracefully"
  on E: Exception do
       messagebox(0,pchar(E.ClassName+': '+E.Message),pchar(''),MB_ICONWARNING+MB_OK); 

  end;
end;
...
Рейтинг: 0 / 0
10.07.2020, 22:38
    #39978308
DmSer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection Closed Gracefully на http.get(url_)
А этот циан поддерживает keep-alive? Если да, то советую использовать этот режим, это сэкономит уйму времени на установку защищённого соединения. Но в этом случае нужно будет использовать один и тот же IdHttp повторно.
...
Рейтинг: 0 / 0
10.07.2020, 22:42
    #39978310
x1ca4064
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection Closed Gracefully на http.get(url_)
ksfhsuej1,

Проверьте: с Вашего IP просто через браузер получается добраться до желаемого?
Если да, нужно смотреть на лог обмена (wireshark-ом, например)
Если нет - попробуйте без всякх прокси, просто с другого провайдера/от друга/сотовый модем.
...
Рейтинг: 0 / 0
11.07.2020, 17:57
    #39978473
ksfhsuej1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection Closed Gracefully на http.get(url_)
DmSer,

Сорри, только добрался до компа. Подскажите как можно узнать поддерживает данный сайт этот режим keep-alive, либо нет. Так понял, что он выручит именно в ситуации когда тот самый "отбой" сервера явился причиной неавторизованного доступа и после превышения некого лимита запросов со стороны оного? У сайта конечно же есть фишка с регистрацией и лич. кабинет с мин.настройками. Но если правильно понял, для поддержки keep-alive нужно предварительно назначить поля "username" и "password" у idHTTP и как-раз указать те самые, что при регистрации на сайте? Просто гадаю, признаться честно.. Не работал плотно еще с этим компонентов. Приведите пож. пример как может выглядеть такой алгоритм инициализации, конечно если он несколько сложнее чем:

Код: pascal
1.
2.
3.
http.Request.UserName:= "login";
http.Request.Password:= "password";
page:= http.get(url_);
...
Рейтинг: 0 / 0
11.07.2020, 18:01
    #39978475
ksfhsuej1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection Closed Gracefully на http.get(url_)
x1ca4064,

Там стала появляться капча(ранее её не наблюдалось). После этого зарегался на сайте, капча изчезла, открывает хорошо любой скомбинированный url в любом браузере. Но в самой программе всё по-старому. Обидно, что первые 2 дня все работало стабильно. Да, пробовал и менять модем(подключал как-раз сотку к компу), беда та же. Попробую wireshark-ом, и пришлю логи
...
Рейтинг: 0 / 0
11.07.2020, 18:10
    #39978477
ksfhsuej1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection Closed Gracefully на http.get(url_)
ksfhsuej1,

Может предпочтительнее использовать пост-запрос с заранее сформированным файлом, типа:

Код: pascal
1.
page:= http.post(url_, "файл с параметрами");
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Connection Closed Gracefully на http.get(url_) / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]