Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.02.2014, 08:09
shpion08 shpion08 вне форума
Прохожий
 
Регистрация: 13.02.2014
Сообщения: 2
Версия Delphi: Delphi XE2
Репутация: 10
По умолчанию Получение данных с хранилища через 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  
Старый 13.02.2014, 10:36
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Windows HTTP Services
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 14.02.2014, 10:31
shpion08 shpion08 вне форума
Прохожий
 
Регистрация: 13.02.2014
Сообщения: 2
Версия Delphi: Delphi XE2
Репутация: 10
По умолчанию

Не совсем понял как его применить под 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  
Старый 14.02.2014, 12:47
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

на сайте Microsoft есть картинка, которая объясняет работу с WinHTTP:

и у каждой функции есть примеры. WinHttpReadData считывает данные как раз в память!
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:00.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter