Webrequest и https как победить ошибку загрузки данных. - страница 3

 
Renat Fatkhullin:

Посмотрите свое первое сообщение, где четко написано, что вас забанили (access denied) на сайте.

Все сайты с календарями/котировками и тд борятся с массовыми (и бесполезными для сайта) выкачками. И конечно банят на основе разных мелких зацепок, позволяя при этом работать нормальным броузерам.


И у нас на сайте работает постоянный контроль массовых выкачек. Вот уже пару дней очередной чемпион делает 2 миллиона запросов на выкачку торговых сигналов, будучи забанен. И тоже не понимает ответов "403, access denied".

Меня на сайте не банили, т.к. данные из любого браузера при этом загружаются нормально и до и после пробы загрузки терминалом, кроме того IP динамический и переподключение ничего не меняет, да и ситуация возникла изначально не у меня, а у пользователей автоматической утилиты для скачки страниц.

А вот использование версии протокола H2 вызывает вопросы, т.к. аналогичная ситуация возникла и в соседней ветке с сайтом ffactory на котором также именно для календарных данных используется протокол h2.

 
Sergey Efimenko:

Меня на сайте не банили, т.к. данные из любого браузера при этом загружаются нормально и до и после пробы загрузки терминалом, кроме того IP динамический и переподключение ничего не меняет, да и ситуация возникла изначально не у меня, а у пользователей автоматической утилиты для скачки страниц.

А вот использование версии протокола H2 вызывает вопросы, т.к. аналогичная ситуация возникла и в соседней ветке с сайтом ffactory на котором также именно для календарных данных используется протокол h2.

Прочтите посимвольно все, что я написал, пожалуйста. Там есть четкий ответ, почему вас в броузере не блокируют. И почему блокируют с утилитой.

https2 тут не играет роли вообще.

 

Проблема не в том, что отсутствую базовые знания по WEB, а в том, что даже после ряда просьб так и не соизволил предоставить комфортных условий для осуществления помощи ему же.

Нужно просто добавить в свойства HTTP заголовка - accept-encoding:gzip, deflate, br

void OnStart()
  {
  
  char post[],result[]; 
  string cookie = "accept-encoding:gzip, deflate, br";
  
  string headers; 
  string url="https://www.dailyfx.com/calendar?previous=true&week=2017/0723"; 
  int timeout=20000;
  int res;

   res=WebRequest("GET",url,cookie,timeout,post,result,headers); 
//--- проверка ошибок 
   if(res==-1) 
     { 
      Print("Ошибка в WebRequest. Код ошибки  =",GetLastError()); 
      //--- возможно, URL отсутствует в списке, выводим сообщение о необходимости его добавления 
      MessageBox("Необходимо добавить адрес '"+url+"' в список разрешенных URL во вкладке 'Советники'","Ошибка",MB_ICONINFORMATION); 
     } 
   else 
     { 
      //--- успешная загрузка 
      PrintFormat("Файл успешно загружен, Размер файла =%d байт.",ArraySize(result)); 
      //--- сохраняем данные в файл 
      int filehandle=FileOpen("129369.htm",FILE_WRITE|FILE_BIN); 
      //--- проверка ошибки 
      if(filehandle!=INVALID_HANDLE) 
        { 
         //--- сохраняем содержимое массива result[] в файл 
         FileWriteArray(filehandle,result,0,ArraySize(result)); 
         //--- закрываем файл 
         FileClose(filehandle); 
        } 
      else Print("Ошибка в FileOpen. Код ошибки =",GetLastError()); 
     } 
  }

 
Sergey Dzyublik:

Проблема не в том, что отсутствую базовые знания по WEB, а в том, что даже после ряда просьб так и не соизволил предоставить комфортных условий для осуществления помощи ему же.

Нужно просто добавить в свойства HTTP заголовка - accept-encoding:gzip, deflate, br

Чтобы самому не разжимать файл, лучше написать

  string cookie = "accept-encoding: deflate";

Как я и говорил - на стороне сервера контролируют мелочи в http запросах и просто дают отказ тем, кто не выглядит как полноценный броузер с полным набором полей.

Это не проблема WebRequest, а именно защита сервера от парсинга различными утилитами, которых можно легко задетектировать по мелочам в полях запроса.

 
Renat Fatkhullin:

Чтобы самому не разжимать файл, лучше написать

Как я и говорил - на стороне сервера контролируют мелочи в http запросах и просто дают отказ тем, кто не выглядит как полноценный броузер с полным набором полей.

Это не проблема WebRequest, а именно защита сервера от парсинга различными утилитами, которых можно легко задетектировать по мелочам в полях запроса.

Премного благодарен Вам за помощь, теперь работает.