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

 
Slawa:

Вы полностью прочитали, что написал Tim?

и далее его код‌

...
string reqheaders="User-Agent: Mozilla/4.0\r\n";
...

‌Вы попробовали его рецепт?


Вот его рецепт в коде с контролем ошибок, если скачивать текущую неделю по ссылке

http://www.forexfactory.com/ffcal_week_this.xml

то все работает.

А‌ если я хочу скачать главную страницу

http://www.forexfactory.com/   или   https://www.forexfactory.com/

то не работает.

И‌ли другую страницу, например вот эту, с четким диапазоном дат,

https://www.forexfactory.com/calendar.php?week=nov1.2015

тоже не работает.

void OnStart()
  {
//---
   string cookie=NULL, result_headers;
   string reqheaders="User-Agent: Mozilla/4.0\r\n";
   char post[],result[];
   int res;
  
   string url;
  
   //url="http://www.forexfactory.com/ffcal_week_this.xml";
  
   url="http://www.forexfactory.com/";
   //url="https://www.forexfactory.com/";
   //url="https://www.forexfactory.com/calendar.php?week=nov1.2015";
  
  
   int timeout=5000;
  
  
   ResetLastError();
  
   res=WebRequest("GET",url,reqheaders,timeout,post,result,result_headers);
  
   int Werr = GetLastError();
      
      
   Print("HEAD= ", reqheaders);
  
   Print(url);
  
   Print("Result downloading res= ", res, "   Werr= ", Werr);
  
   Print("res_headers= ", result_headers);
  
  }


 
Кто-нибудь, смог решить эту ситуацию или, хотя бы, найти настоящие причины?
 
Marat Sultanov:
Кто-нибудь, смог решить эту ситуацию или, хотя бы, найти настоящие причины?


Решение содранное с индикатора FFcal, в файле прикрепил. В виде скрипта.

Без    WebRequest,

не получилось WebRequest запустить.


Обязательно разрешить dll в терминале в настройках.

Файлы:
ffcccc01.mq4  5 kb
 
Dmytro Zelenskyy:


Решение содранное с индикатора FFcal, в файле прикрепил. В виде скрипта.

Без    WebRequest,

не получилось WebRequest запустить.


Обязательно разрешить dll в терминале в настройках.


Благодарю за пример!

Эхх... жаль, что нативным кодом ситуацию не решить :(

 

Мне надо скачать страницы с forexfactory.com  с GMT  0.

Скрипт ffcccc01.mq4 качает страницы с   forexfactory.com    с GMT по умолчанию (время новостей),  

летом это -4    (-5  + преход на летнее время)

зимой это -5

Когда работал    Webrequest, то я просто передавал куки.

cookie= "fftimezoneoffset=0; ffdstonoff=0; fftimezoneoffset=0; fftimeformat=0; ffverifytimes=1";

WebRequest("GET",sUrlF,cookie,NULL,timeout,post,0,result,headers);


Подскажите плиз  как передать куки без    Webrequest,  на примере кода   cкрипта   ffcccc01.mq4

 

Код скрипта

string  sUrl; // = "http://forexfactory.com/ffcal_week_this.xml";

string sData;

int        logHandle = -1;

bool bWinInetDebug = false;

int hSession_IEType;
int hSession_Direct;
int Internet_Open_Type_Preconfig = 0;
int Internet_Open_Type_Direct = 1;
int Internet_Open_Type_Proxy = 3;
int Buffer_LEN = 80;

#import "wininet.dll"

   #define INTERNET_FLAG_PRAGMA_NOCACHE    0x00000100 // Forces the request to be resolved by the origin server, even if a cached copy exists on the proxy.
   #define INTERNET_FLAG_NO_CACHE_WRITE    0x04000000 // Does not add the returned entity to the cache. 
   #define INTERNET_FLAG_RELOAD            0x80000000 // Forces a download of the requested file, object, or directory listing from the origin server, not from the cache.

   int InternetOpenW( string sAgent, int lAccessType, string sProxyName, string sProxyBypass, int lFlags );
   int InternetOpenUrlW(int     hInternetSession,string         sUrl,string     sHeaders="",int         lHeadersLength=0,int    lFlags=0,int    lContext=0);    
   int InternetReadFile(int hFile, uchar &sBuffer[],int lNumBytesToRead,int &lNumberOfBytesRead[]); 
   int InternetCloseHandle(int  hInet); 

#import

void OnStart()
  {
//---

   sUrl = "https://www.forexfactory.com/calendar.php?week=nov1.2015";

   GrabWeb(sUrl, sData);
   
   Print("-------------------");
   
   Print("StringLen(sData)= ", StringLen(sData) );
   
   Alert(sData);
   
   Print("-------------------");
   
   int HandleWeb = FileOpen("fffccc01.htm", FILE_TXT|FILE_WRITE);
   FileWriteString(HandleWeb, sData, 0);
   FileClose(HandleWeb);
   
  }
//+------------------------------------------------------------------+


int hSession(bool Direct)
{
        string InternetAgent;
        if (hSession_IEType == 0)
        {
                InternetAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Q312461)";
                hSession_IEType = InternetOpenW(InternetAgent, Internet_Open_Type_Preconfig, "0", "0", 0);
                hSession_Direct = InternetOpenW(InternetAgent, Internet_Open_Type_Direct, "0", "0", 0);
        }
        if (Direct) 
        { 
                return(hSession_Direct); 
        }
        else 
        {
                return(hSession_IEType); 
        }
}


void Log(string msg)
{
        if (!EnableLogging) 
                return;
                
        if (logHandle <= 0) 
                return;
                
        msg = TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES|TIME_SECONDS) + " " + msg;
        FileWrite(logHandle,msg);
}


bool GrabWeb(string strUrl, string& strWebPage)
{
        int     hInternet;
        int             iResult;
        int     lReturn[]       = {1};
        uchar sBuffer[1024];
        int     bytes;
   uint flags=INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_PRAGMA_NOCACHE | INTERNET_FLAG_RELOAD;

   hInternet = InternetOpenUrlW(hSession(FALSE), strUrl, NULL, 0, flags);       
        //hInternet = InternetOpenUrlW(hSession(FALSE), strUrl, "0", 0, 
        //                                                      INTERNET_FLAG_NO_CACHE_WRITE | 
        //                                                      INTERNET_FLAG_PRAGMA_NOCACHE | 
        //                                                      INTERNET_FLAG_RELOAD, 0);
                                                                
        if (bWinInetDebug) 
                Log("hInternet: " + hInternet);   
        if (hInternet == 0) 
                return(false);

        Print("Reading URL: " + strUrl);           //added by MN        
        iResult = InternetReadFile(hInternet, sBuffer, Buffer_LEN, lReturn);
        
        if (bWinInetDebug) Log("iResult: " + iResult);
        if (bWinInetDebug) Log("lReturn: " + lReturn[0]);
        if (bWinInetDebug) Log("iResult: " + iResult);
        if (bWinInetDebug) Log("sBuffer: " +  CharArrayToString(sBuffer, 0, lReturn[0]));
        if (iResult == 0)  return(false);
        bytes = lReturn[0];
        strWebPage = CharArrayToString(sBuffer, 0, lReturn[0]);
        
        //If there's more data then keep reading it into the buffer
        while (lReturn[0] != 0)
           {
                iResult = InternetReadFile(hInternet, sBuffer, Buffer_LEN, lReturn);
                if (lReturn[0]==0) break;
                bytes = bytes + lReturn[0];
                strWebPage = strWebPage + CharArrayToString(sBuffer, 0, lReturn[0]);
        }
        Print("Closing URL web connection");   //added by MN
        iResult = InternetCloseHandle(hInternet);
        if (iResult == 0) return(false);                
        
        return(true);
}
 
Dmytro Zelenskyy:


 http://www.forexfactory.com/

‌сейчас стал

https://www.forexfactory.com/

м‌ожет здесь надо копать? Слабо верится в заговоры MQL и сознательной блокировке новостного сайта.

Вроде читал, это требование гугла, чтобы все сайты перешли на https. Вообще все абсолютно, а то индексировать не будет.
 
Alexey Volchanskiy:
Вроде читал, это требование гугла, чтобы все сайты перешли на https. Вообще все абсолютно, а то индексировать не будет.


https://www.dailyfx.com/calendar

https://ru.investing.com/economic-calendar/


с этих сайтов   Webrequest   качает и все Ок

Почему свет клином сошелся на     https://www.forexfactory.com/‌    непонятно.

Forex Economic Calendar
  • DailyFX
  • www.dailyfx.com
Time Currency Event Importance Actual Forecast Previous Actual (A) Forecast (F) Previous (P) Alerts Notes
 
Dmytro Zelenskyy:

Код скрипта

Напишите, пожалуйста, MyWebRequest. Чтобы можно было все коды, которые использовали обычный WebRequest, заменить на рабочий MyWebRequest.
 

Webrequest  заработал. Возможно после обновления, хотя об этом 

https://www.metatrader4.com/ru/releasenotes

ни слова.

Последние обновления MetaTrader 4
Последние обновления MetaTrader 4
  • www.metatrader4.com
Последние обновления торговой платформы для Форекса MetaTrader 4