|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Получение данных с хранилища через HTTPS
Доброго времени суток!
Подскажите как реализовать чтение файлов, лежащих в хранилище (iOmega ix2-200) скажем по адресу: HTTPS://www.адрес.домен/. Тут при заходе на него (через браузер) принимаем сертификат безопасности. Далее для авторизации (у хранилища она своя) на страницу HTTPS://www.адрес.домен/login.html?pg=index.html. Ну и в общем после всего этого мы вроде как получаем доступ к файлам, к примеру: HTTPS://www.адрес.домен/тест папка/log.ini; HTTPS://www.адрес.домен/тест папка/setting.txt ; HTTPS://www.адрес.домен/тест папка/help.pdf. Собственно вопрос... как до всего этого добраться из программы на Delphi XE2 ?)) Открытие из сети если (с предварительной авторизацией): Код:
inik := TIniFiles.Create('192.168.1.22/тест папка/log.ini'); fStr := TStringList.loadfromfile('192.168.1.22/тест папка/setting.txt'); AcroPDF.src := '192.168.1.22/тест папка/help.pdf'; Так вот как тоже самое сделать только не из локалки а из HTTPS? PS. Ранее с подобным не сталкивался, начал искать - нашел много всего... (пр.1; пр.2; пр.3; пр.4 и далее поиски по NetShareAdd, SVR API...) НО! как все это применить в мое случае, как собрать в кучу - не смог разобраться! HELP! |
#2
|
||||
|
||||
Пишу программы за еду. __________________ |
#3
|
|||
|
|||
Не совсем понял как его применить под Delphi. (там вроде как данные о странице... а мне нужно скачивание файлов в оперативу!! (без сохранения) для разового просмотра указанного файла)
На оф.сайте код C/C++ API / JS. С++ знаю весьма "хренова"), так что прошу исправить мои ошибки при переделки данного кода с С на Delphi. Оригинал С++ Оригинал JS(авторизация) Попытка переделать код: Код:
uses winhttp_tlb; ... begin DWORD ChooseAuthScheme(DWORD dwSupportedSchemes) begin if (dwSupportedSchemes and WINHTTP_AUTH_SCHEME_NEGOTIATE) then return WINHTTP_AUTH_SCHEME_NEGOTIATE else if (dwSupportedSchemes and WINHTTP_AUTH_SCHEME_NTLM) then return WINHTTP_AUTH_SCHEME_NTLM else if (dwSupportedSchemes and WINHTTP_AUTH_SCHEME_PASSPORT) then return WINHTTP_AUTH_SCHEME_PASSPORT else if (dwSupportedSchemes and WINHTTP_AUTH_SCHEME_DIGEST) then return WINHTTP_AUTH_SCHEME_DIGEST else return 0; end; struct SWinHttpSampleGet begin LPCWSTR szServer; LPCWSTR szPath; BOOL fUseSSL; LPCWSTR szServerUsername; LPCWSTR szServerPassword; LPCWSTR szProxyUsername; LPCWSTR szProxyPassword; end; void WinHttpAuthSample(IN SWinHttpSampleGet * pGetRequest) begin DWORD dwStatusCode := 0; DWORD dwSupportedSchemes; DWORD dwFirstScheme; DWORD dwSelectedScheme; DWORD dwTarget; DWORD dwLastStatus := 0; DWORD dwSize := sizeof(DWORD); BOOL bResults := FALSE; BOOL bDone := FALSE; DWORD dwProxyAuthScheme := 0; HINTERNET hSession := NULL, hConnect := NULL, hRequest := NULL; hSession := WinHttpOpen(L " WinHTTP Example / 1.0 ", WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0); INTERNET_PORT nPort := (pGetRequest - > fUseSSL) ? INTERNET_DEFAULT_HTTPS_PORT: INTERNET_DEFAULT_HTTP_PORT; if (hSession) then hConnect := WinHttpConnect(hSession, pGetRequest - > szServer, nPort, 0); if (hConnect) then hRequest := WinHttpOpenRequest(hConnect, L " GET ", pGetRequest - > szPath, NULL, WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES, (pGetRequest - > fUseSSL) ? WINHTTP_FLAG_SECURE: 0); if (hRequest = = NULL) then bDone := TRUE; while not(bDone) do begin if (dwProxyAuthScheme not = 0)bResults = WinHttpSetCredentials(hRequest, WINHTTP_AUTH_TARGET_PROXY, dwProxyAuthScheme, pGetRequest - > szProxyUsername, pGetRequest - > szProxyPassword, NULL); bResults = WinHttpSendRequest(hRequest, WINHTTP_NO_ADDITIONAL_HEADERS, 0, WINHTTP_NO_REQUEST_DATA, 0, 0, 0); if (bResults) then bResults = WinHttpReceiveResponse(hRequest, NULL); if (not bResults and GetLastError() = = ERROR_WINHTTP_RESEND_REQUEST) then continue; if (bResults) then bResults = WinHttpQueryHeaders(hRequest, WINHTTP_QUERY_STATUS_CODE or WINHTTP_QUERY_FLAG_NUMBER, NULL, &dwStatusCode, &dwSize, NULL); if (bResults) then begin switch(dwStatusCode) begin case 200: begin printf (" The resource was successfully retrieved.\ n "); bDone := TRUE; break; end; case 401: begin printf(" The server requires authentication.Sending credentials .. .\ n "); bResults := WinHttpQueryAuthSchemes(hRequest, &dwSupportedSchemes, &dwFirstScheme, &dwTarget); if (bResults) then begin dwSelectedScheme := ChooseAuthScheme(dwSupportedSchemes); if (dwSelectedScheme = = 0) then bDone := TRUE else bResults := WinHttpSetCredentials(hRequest, dwTarget, dwSelectedScheme, pGetRequest - > szServerUsername, pGetRequest - > szServerPassword, NULL); end; if (dwLastStatus = = 401) then bDone := TRUE; break; end; case 407: printf(" The proxy requires authentication.Sending credentials .. .\ n "); bResults = WinHttpQueryAuthSchemes(hRequest, &dwSupportedSchemes, &dwFirstScheme, &dwTarget); if (bResults) then dwProxyAuthScheme := ChooseAuthScheme(dwSupportedSchemes); if (dwLastStatus = = 407) then bDone := TRUE; break; default: printf(" Error.Status code % d returned.\ n ", dwStatusCode); bDone := TRUE; end; end; dwLastStatus := dwStatusCode; if (not bResults) then bDone := TRUE; end; if (not bResults) then begin DWORD dwLastError = GetLastError(); printf(" Error % d has occurred.\ n ", dwLastError); end; if (hRequest) then WinHttpCloseHandle(hRequest); if (hConnect) then WinHttpCloseHandle(hConnect); if (hSession) then WinHttpCloseHandle(hSession); end; end; |
#4
|
||||
|
||||
на сайте Microsoft есть картинка, которая объясняет работу с WinHTTP:
и у каждой функции есть примеры. WinHttpReadData считывает данные как раз в память! Пишу программы за еду. __________________ |