Форум по 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 ?))

Открытие из сети если (с предварительной авторизацией):
Код:
1
2
3
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(авторизация)
Попытка переделать код:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
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, время: 22:53.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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