WebRequest не скачивает с forexfactory com - страница 5

 

Тот же пользователь запускает качалку без Webrequest (на    #import "wininet.dll"... ), и страницы сайта скачиваются отлично.

 
Dmytro Zelenskyy:

Тот же пользователь запускает качалку без Webrequest (на    #import "wininet.dll"... ), и страницы сайта скачиваются отлично.

Возможно, ловят по специфическим заголовкам

 

12175

WinINet failed to perform content decoding on the response

это проблема на стороне клиента а не сервера.

 

Прошу у всех прощения за то, что отнимаю время.

У меня вопрос, т.к. причину выяснить так и не удалось, следовательно и решение не найти.

Почему только на win7 функция WebRequest выдает ошибку:

5203

ERR_WEBREQUEST_REQUEST_FAILED

HTTP request failed


1) Это происходит на Win7.

2) Все прекрасно работает на Win8, Win8.1, Win10

3) Это происходит и в МТ4 и в МТ5.

4) Это происходит с любыми заголовками.

5) В обсуждении, выше, написали, что при использовании wininet.dll страницы приходят корректно.

6) Блокировку я исключил по причине того, что такая ошибка происходит стабильно на любой машине с Win7, с разными айпи. Только если FF не заблокировал всех, кто сидит на Win7 (может место в черном списке закончилось и они решили все радикально, а может... кто их знает, может они просто фанаты win10 или мелкомягкие их заставили.. :))

Возможно, кто-нибудь выяснил реальную причину проблемы? (если да, то с радостью выслушаю любые теории, можно и через личку).

Для тестов использовался код:

#property version   "1.00"

//+------------------------------------------------------------------+
//| defines
//+------------------------------------------------------------------+
#ifndef  _Error_
 #define _Error_(info)  { Print("Error{",info,"} Line{"+(string)__LINE__+"} File{"+__FILE__+"} Function{"+__FUNCTION__+"} LastError#{"+(string)GetLastError()+"}"); }
#endif

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   Test("https://www.forexfactory.com/");
   Test("https://www.mql5.com/");
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Test(const string url)
{ 
   char   Post[];
   char   Result[];
   string Headers = "";
   string Cookie = NULL;

   Print("Getting page: ",url);

   ResetLastError();

   int Res = WebRequest("GET",
                        url, 
                        Cookie,
                        NULL,
                        (int)30*1000,
                        Post,
                        0,
                        Result,
                        Headers);            
  
   if (Res < 0)
      _Error_("WebRequest is not allowed!")
   else
   {
      Print("Success: result is ",Res,"; Page size is ",ArraySize(Result)," bytes from: ",url);
      return;
   }
   
   Print("Fail!");
}
//+------------------------------------------------------------------+
 

А вот такой вариант попробуйте, мне очень интересно как на  win7,

только на url  на forexfactory  надо поменять.

void OnStart()
  {
//---
   string cookie=NULL, result_headers, web_down;
   string reqheaders;
   char post[],result[];
   int res;
   string url;
   int timeout=30000;
   int cc;

   url="https://www.dailyfx.com/calendar?previous=true&week=2017/0723";
   //url="https://www.dailyfx.com/calendar?previous=true&week=2017/0723";
   //url = "https://www.dailyfx.com/files/Calendar-07-23-2017.pdf";
   
   Print(url);
   
   
   
   //======================================
   
   Print("=====================================");
   
   //reqheaders="User-Agent: Mozilla/4.0\r\n";
   reqheaders = "accept-encoding: deflate";
   
   for(cc = 0; cc < 3; cc++)
   {
      ResetLastError();
      
      res=WebRequest("GET", url, reqheaders, timeout, post, result, result_headers);
      
      int Werr = GetLastError();
         
      Print("---- WebRequest(\"GET\",url,reqheaders,timeout,post,result,result_headers) ----");
      
      Print("res= ", res, "   Werr= ", Werr);
         
      Print("reqheaders= ", reqheaders);
      
      Print("result_headers= ", result_headers);
      
      web_down = CharArrayToString(result, 0, -1);
      
      Print("StringLen(web_down)= ", StringLen(web_down) );
      
      if(StringLen(web_down) > 700)
         Print(StringSubstr(web_down, 0, 200 ) );
      else
         Print(web_down);
      
      if(res > -1) break;
   } 
 
Dmytro Zelenskyy:

2017.09.21

2017.09.21 19:04:56.222 TestWeb2 (EURUSD,H1) https://www.forexfactory.com/

2017.09.21 19:04:56.224 TestWeb2 (EURUSD,H1) =====================================

2017.09.21 19:04:58.415 TestWeb2 (EURUSD,H1) ---- WebRequest("GET",url,reqheaders,timeout,post,result,result_headers) ----

2017.09.21 19:04:58.415 TestWeb2 (EURUSD,H1) res= -1   Werr= 5203

2017.09.21 19:04:58.415 TestWeb2 (EURUSD,H1) reqheaders= accept-encoding: deflate

2017.09.21 19:04:58.415 TestWeb2 (EURUSD,H1) result_headers= 

2017.09.21 19:04:58.415 TestWeb2 (EURUSD,H1) StringLen(web_down)= 52

2017.09.21 19:04:58.415 TestWeb2 (EURUSD,H1) www.forexfactory.com:443 send request failed [12175]

2017.09.21 19:05:00.104 TestWeb2 (EURUSD,H1) ---- WebRequest("GET",url,reqheaders,timeout,post,result,result_headers) ----

2017.09.21 19:05:00.104 TestWeb2 (EURUSD,H1) res= -1   Werr= 5203

2017.09.21 19:05:00.104 TestWeb2 (EURUSD,H1) reqheaders= accept-encoding: deflate

2017.09.21 19:05:00.104 TestWeb2 (EURUSD,H1) result_headers= 

2017.09.21 19:05:00.104 TestWeb2 (EURUSD,H1) StringLen(web_down)= 52

2017.09.21 19:05:00.104 TestWeb2 (EURUSD,H1) www.forexfactory.com:443 send request failed [12175]

2017.09.21 19:05:01.903 TestWeb2 (EURUSD,H1) ---- WebRequest("GET",url,reqheaders,timeout,post,result,result_headers) ----

2017.09.21 19:05:01.903 TestWeb2 (EURUSD,H1) res= -1   Werr= 5203

2017.09.21 19:05:01.903 TestWeb2 (EURUSD,H1) reqheaders= accept-encoding: deflate

2017.09.21 19:05:01.903 TestWeb2 (EURUSD,H1) result_headers= 

2017.09.21 19:05:01.903 TestWeb2 (EURUSD,H1) StringLen(web_down)= 52

2017.09.21 19:05:01.903 TestWeb2 (EURUSD,H1) www.forexfactory.com:443 send request failed [12175]

Как видите, пресловутая ошибка 5203. Эта ошибка вылезает при любом способе запроса в forexfactory.com

Простите, какие способы вы использ(овали/уете), чтобы обойти эту ситуацию? Используете виндовский wininet или строгое использование win8-10?

 

Ясно, печально.

Использую win8

В случае ошибки приходится обходится без Webrequest ( виндовский wininet)

 
Stefan Stoyanov:
...

Как говорит товарищ Сталин нет человек нет проблем

...

Тиражирование лжи, мне думается, тут не к месту.

 

Коллеги, приветствую!

Сегодня столкнулся с "несимметричной" работой одного и того же советника, который использует WebRequest на myfxbook на одинаковом MT4 Buit 1090. Разница только в том, что в "нерабочем" случае терминал стоит WinXP, в рабочем на Win7. С сегодняшнего дня на myfxbook http стали редиректить. WebRequest(ы) с WinXP эти редиректы не понимают.

На PHP эта ситуация лечится добавлением

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

Кто нибудь знает, как в MQL4 в WebRwquest эту опцию внедрить?

Спасибо. 

 
Mikhail Kontsevoy:

Коллеги, приветствую!

Сегодня столкнулся с "несимметричной" работой одного и того же советника, который использует WebRequest на myfxbook на одинаковом MT4 Buit 1090. Разница только в том, что в "нерабочем" случае терминал стоит WinXP, в рабочем на Win7. С сегодняшнего дня на myfxbook http стали редиректить. WebRequest(ы) с WinXP эти редиректы не понимают.

На PHP эта ситуация лечится добавлением

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

Кто нибудь знает, как в MQL4 в WebRwquest эту опцию внедрить?

Спасибо. 

А указать конкретный адрес, чтоб шёл прямо по ссылке?