Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Отслеживай все платежи в профиле. Это просто!
Viktor Zhelnov
1186
Viktor Zhelnov 2010.04.21 11:42 
Привет. Помогите разобраться. При вызове функции HttpQueryInfoA при попытке получить дату создания файла, функция возвращает 0, такое же происходит и при запросе размера файла. Из-за чего это может быть? 
int BufLen=256;
  int ind=0;
  int buf0[256];
  string s="";
  int LastModified_HttpQueryInfoA=0;
  int iRes;
  iRes=HttpQueryInfoA(hURL,HTTP_QUERY_LAST_MODIFIED,buf0,BufLen,ind);
  if(iRes<=0)
  {
    Print("Ошибка при вызове HttpQueryInfoA()");
  }
  else
  {
    s="";
    for(int k = 0; k < BufLen; k++)
    {
      s=s+CharToStr(buf0[k]);
    }
    if(StringLen(s) > 0) LastModified_HttpQueryInfoA=StrToInteger(s);
  }
  if(LastModified_HttpQueryInfoW > 0)
  {
    Print("Дата изменения = ",LastModified_HttpQueryInfoA);
  }
  else
  {
    Print("Дата изменения неизвестна");
  }
Dmitry Fedoseev
42648
Dmitry Fedoseev 2010.04.21 12:45  

Если для буфера используется массив из 256-ти интов, его размер 1024.

Покажите как объявляете HttpQueryInfoA().

Viktor Zhelnov
1186
Viktor Zhelnov 2010.04.21 12:50  
Вот объявления всех функций wininet.dll. С 1024 тоже не работает. Причем постоянно возвращает 0, пробовал GetLastError() использовать - ошибок никаких нет.

#import "wininet.dll"
int InternetAttemptConnect(int x);
int InternetOpenA(string sAgent,int lAccessType,string sProxyName="",string sProxyBypass="",int lFlags=0);
int InternetOpenUrlA(int hInternetSession,string sUrl,string sHeaders="",int lHeadersLength=0,int lFlags=0,int lContext=0);
int InternetReadFile(int hFile,int &sBuffer[],int lNumBytesToRead,int &lNumberOfBytesRead[]);
int HttpQueryInfoA(int hRequest,int dwInfoLevel,int &lpvBuffer[],int &lpdwBufferLength,int &lpdwIndex);
int InternetCloseHandle(int hInet);
#import
Dmitry Fedoseev
42648
Dmitry Fedoseev 2010.04.21 13:08  

Попробуйте вместо

int HttpQueryInfoA(int hRequest,int dwInfoLevel,int &lpvBuffer[],int &lpdwBufferLength,int &lpdwIndex);

Вот так:

int HttpQueryInfoA(int hRequest,int dwInfoLevel,int &lpvBuffer[],int & lpdwBufferLength[],int &lpdwIndex);

Также, как с int InternetReadFile(...

Dmitry Fedoseev
42648
Dmitry Fedoseev 2010.04.21 13:16  
С последним параметром lpdwIndex тоже также, если он по ссылке передается.
Viktor Zhelnov
1186
Viktor Zhelnov 2010.04.21 13:17  
Так это же по сути длина буфера, как я тогда считывать с него буду? Попробовал, не помогло, все равно в ответ 0. В InternetReadFile(int hFile,int &sBuffer[],int lNumBytesToRead,int &lNumberOfBytesRead[]) тоже ведь указан буфер и размер его следом.
Viktor Zhelnov
1186
Viktor Zhelnov 2010.04.21 13:28  
Оба менял, не помогает.
Dmitry Fedoseev
42648
Dmitry Fedoseev 2010.04.21 13:50  

Вот при таком объявлении:

   int   HttpQueryInfoA(      int         hRequest,
                              int         dwInfoLevel,
                              int      &  lpvBuffer[],
                              int      &  lpdwBufferLength[],
                              int      &  lpdwIndex[]);
и вызове с флагом HTTP_QUERY_CONTENT_LENGTH, работает.
Viktor Zhelnov
1186
Viktor Zhelnov 2010.04.21 13:55  
А можешь еще пожалуйста привести фрагмент кода с определением CONTENT LENGTH.
Viktor Zhelnov
1186
Viktor Zhelnov 2010.04.21 14:16  
У меня при таком объявлении:

int HttpQueryInfoA(int hRequest,int dwInfoLevel,int &lpvBuffer[],int &lpdwBufferLength[],int &lpdwIndex[]);
И при таком объявлении переменных:

int BufLen[1024];
  int ind[0];
  int buf0[256];
  string s="";
  int NewModified=0;
  int iRes;
  iRes=HttpQueryInfoA(hURL,HTTP_QUERY_LAST_MODIFIED,buf0,BufLen,ind);
  if(iRes<=0)
  {
    Print("Ошибка при вызове HttpQueryInfoA()");
    Inf="Ошибка получения информации о файле";
    Info(Inf);
  }
Все равно не работает.
Christo Tsvetanov
990
Christo Tsvetanov 2010.04.21 14:21  

Впринципе, некоторые веб серверы такую информацию и не дают. Там докачки не поддерживают и т.д. Проверьте сначало сервер - вернее настройки сервера.

/ /12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий