![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Доброго времени суток!
Подскажите как реализовать чтение файлов, лежащих в хранилище (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 считывает данные как раз в память! |