Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Работа с FTP через CERN прокси

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Работа с FTP через CERN прокси
Имя
Сообщение << Старые топики   Новые топики >>
Работа с FTP через CERN прокси - 2009-05-21 17:44:00.293333   
vtg

Сообщений: 118
Оценки: 0
Присоединился: 2007-05-19 03:47:20.353333
Нужно получать ответы от FTP-сервера через CERN прокси.
Делаю так
DWORD dwCode, dwSize, dwLength; TCHAR msg[1024]; BOOL bInitalRequest = TRUE; HINTERNET hInternet = InternetOpen(_T("foo"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, INTERNET_FLAG_KEEP_CONNECTION); if(!hInternet) { AfxMessageBox(_T("Не удалось начать сеанс"), MB_OK); return; } HINTERNET hConnect = InternetOpenUrl(hInternet, _T("ftp://ftp.microsoft.com/"), NULL, 0, INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_RELOAD, 0); if (!hConnect) { wsprintf(msg, _T("%d"), GetLastError()); MessageBox(0, msg, _T("InternetOpenUrl error"),MB_OK); return; } again: if (!bInitalRequest) { if (!HttpSendRequest (hConnect, NULL,0,NULL, 0)) { wsprintf(msg, _T("%d"), GetLastError()); MessageBox(0, msg, _T("HttpSendRequest error"),MB_OK); return; } } dwSize = sizeof(dwCode); if (!InternetQueryOption(hConnect, INTERNET_OPTION_HANDLE_TYPE, &dwCode, &dwSize)) { wsprintf(msg, _T("%d"), GetLastError()); MessageBox(0, msg, _T("InternetQueryOption error"),MB_OK); return; } if ((dwCode == INTERNET_HANDLE_TYPE_HTTP_REQUEST) || (dwCode == INTERNET_HANDLE_TYPE_CONNECT_HTTP)) { // if were are here, it means that we use HTTP to talk the proxy dwSize = sizeof (DWORD); if (!HttpQueryInfo (hConnect, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &dwCode, &dwSize, NULL)) { wsprintf(msg, _T("%d"), GetLastError()); MessageBox(0, msg, _T("HttpQueryInfo error"),MB_OK); return; } if (dwCode == HTTP_STATUS_PROXY_AUTH_REQ) { if (!InternetQueryDataAvailable (hConnect, &dwLength, 0,0)) { wsprintf(msg, _T("%d"), GetLastError()); MessageBox(0, msg, _T("InternetQueryDataAvailable error"),MB_OK); return; } // Acquire user credentials. TCHAR szUser[50]; TCHAR szPass[50]; if ( !InternetSetOption (hConnect, INTERNET_OPTION_PROXY_USERNAME, (LPVOID) szUser, lstrlen (szUser) )) { wsprintf(msg, _T("%d"), GetLastError()); MessageBox(0, msg, _T("InternetSetOption error"),MB_OK); return; } if (!InternetSetOption (hConnect, INTERNET_OPTION_PROXY_PASSWORD, (LPVOID) szPass, lstrlen (szPass) )) { wsprintf(msg, _T("%d"), GetLastError()); MessageBox(0, msg, _T("InternetSetOption error"),MB_OK); return; } bInitalRequest = FALSE; goto again; } // if ( dwCode == HTTP_STATUS_PROXY_AUTH_REQ else { //Здесь нужно получить ответ от целевого сервера } } // if ( (dwCode == INTERNET_HANDLE_TYPE_HTTP_REQUEST InternetCloseHandle(hConnect); InternetCloseHandle(hInternet); Но как определить, что отвечает целевой FTP-сервер?
Проблема в том, что если с прокси всё нормально, то hConnect == NULL ВСЕГДА. В то время, как целевой FTP мог вернуть ошибку, например, 530 или 11001. Прокси определяет и сообщает об этом (можно увидеть через бараузер). Как мне эту ошибку определить в моём коде, программно? Не читать же возвращаемую прокси сервером HTML-страницу через InternetReadFile и искать в ней код ошибки.
Post #: 1
RE: Работа с FTP через CERN прокси - 2009-05-21 17:47:01.406666   
Sрam

Сообщений: 2863
Оценки: 372
Присоединился: 2009-01-16 15:23:43.276666
Быстрее с последним вариантов разберешся!
Post #: 2
RE: Работа с FTP через CERN прокси - 2009-05-21 17:54:33.423333   
vtg

Сообщений: 118
Оценки: 0
Присоединился: 2007-05-19 03:47:20.353333
Читать возвращаемую прокси сервером HTML-страницу через InternetReadFile и искать в ней код ошибки?
Глупости. Особенно если учесть, что разные марки прокси будут формировать разные страницы.
Post #: 3
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Работа с FTP через CERN прокси







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.