Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ostrzeżenie
Wycofana, nieobsługiwana aplikacja klasyczna Internet Explorer 11 ma zostać trwale wyłączona za pośrednictwem aktualizacji aplikacji Microsoft Edge dla niektórych wersji systemu Windows 10. Aby uzyskać więcej informacji, zobacz artykuł pt. Często zadawane pytania dotyczące wycofywania aplikacji klasycznej Internet Explorer 11.
Serwer proxy sieci Web oparty na protokole CERN używa protokołu HTTP do całej komunikacji z klientami. W związku z tym zestaw funkcji FTP Wininet nie może służyć do pobierania zasobów na serwerze FTP, jeśli serwer FTP jest dostępny za pośrednictwem serwera proxy opartego na CERN w imieniu klienta. Zamiast tego klient musi używać ogólnych funkcji Wininet, takich jak InternetOpenUrl
i InternetReadFile
, aby prawidłowo pobrać dane ze strumienia HTTP wysyłanego z serwera proxy opartego na cern.
Oryginalna wersja produktu: Internet Explorer
Oryginalny numer KB: 166961
Więcej informacji
Usługi serwera proxy zgodne z cern obsługują żądania HTTP (WWW), FTP i Gopher. Jednak komunikacja między serwerem proxy opartym na cern a jego klientami korzysta tylko z protokołu HTTP. Na poniższym diagramie pokazano, jak żądanie FTP jest przekazywane przy użyciu usługi serwera proxy zgodnego z cern:
Get ftp://host.com/root/test.doc HTTP 1.0 FTP Request
|=========| |=============| |=============|
| |---------------->| Cern-based |--------->| |
| Client | HTTP | Proxy Server| FTP | Ftp Server |
| |<----------------| |<---------| |
|=========| |=============| |=============|
HTTP/1.0 200 <document> FTP Response
Ponieważ serwer proxy oparty na CERN komunikuje się z klientami w protokole HTTP, nie można użyć zestawu FTP funkcji Wininet, jeśli klient uzyskuje dostęp do serwera FTP za pośrednictwem tego serwera proxy. Zamiast tego należy użyć polecenia InternetOpenUrl
i InternetReadFile
pobrać żądane dane ze strumienia HTTP wysyłanego przez serwer proxy.
Jeśli przekazany InternetOpenUrl
adres URL FTP jest adresem URL prowadzącym do pliku na serwerze FTP, możesz użyć InternetReadFile
do odczytania całej zawartości pliku. Jeśli przekazany InternetOpenUrl
adres URL FTP jest adresem URL do katalogu na serwerze FTP, InternetReadFile
pobiera listę katalogów adresu URL FTP jako dokument HTML. W obu przypadkach może być konieczne ponawianie wywołania funkcji InternetReadFile
do momentu odczytania wszystkich danych w strumieniu HTTP.
Jeśli klient zamierza pobrać coś więcej z poziomów niższych niż adres URL katalogu FTP, musi przeanalizować dokument HTML, aby wyciągnąć adresy URL podkatalogów lub plików i wydać więcej wywołań InternetOpenUrl
i InternetReadFile
. Ponadto w przypadku użycia serwera proxy opartego na protokole CERN flaga INTERNET_FLAG_RAW_DATA
nie powinna być określona w wywołaniu InternetOpenUrl
.
Poniższy pseudokod demonstruje, jak wywoływać InternetOpenUrl
i InternetReadFile
, gdy serwer proxy oparty na CERN jest używany do uzyskiwania dostępu do serwera FTP.
CHAR strURL[] = "ftp://host.com/root/test.doc";
HANDLE f; //local file handle
HINTERNET hInternetFile;
DWORD dwRead, dwWritten;
CHAR szTemp[1024];
hInternetFile = InternetOpenUrl(hInternetSession, (LPCTSTR)strURL, NULL,
0, INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE, 0);
if (hInternetFile == NULL)
{
do
some error processing;
quit;
}
//download the file to c:\deleteme
f = CreateFile("c:\\deleteme", GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (f == INVALID_HANDLE_VALUE)
{
do
some error processing;
quit;
}
while (InternetReadFile(hInternetFile, (LPVOID)szTemp, 1024, &dwRead))
{
if (!dwRead)
break;
WriteFile(f, (LPVOID)szTemp, dwRead, &dwWritten, NULL);
}
CloseHandle(f);
//if the strURL is a URL to a file on the ftp server, we get the file
//and store it in c:\deleteme.
//if the strURL is a URL to a directory on the ftp server, c:\deleteme
//will be a HTML page of the directory listing. You will have to parse
//the html page, and construct new URLs, and call the above code again.
Gdy klient ma bezpośrednie połączenie z serwerem FTP lub jest połączony z serwerem FTP za pośrednictwem serwera proxy FTP TIS, komunikacja z klientem jest w ftp. Klient może określić flagę INTERNET_FLAG_RAW_DATA
w InternetOpenUrl
, a następnie użyć InternetFindNextFile
, aby uzyskać strukturę WIN32_FIND_DATA i wyliczyć wszystkie podkatalogi i pliki adresu URL. Klient może również używać zestawu funkcji FTP WinInet w takich sytuacjach.
Poniższy pseudo kod pokazuje, jak wywołać InternetOpenUrl
i InternetReadFile
, gdy flaga INTERNET_FLAG_RAW_DATA
jest określona w wywołaniu InternetOpenUrl
.
CHAR strURL[] = "ftp://host.com/root/test.doc";
HANDLE f; //local file handle
HINTERNET hInternetFile;
DWORD dwRead, dwWritten;
CHAR szTemp[1024];
hInternetFile = InternetOpenUrl(hInternetSession, (LPCTSTR)strURL, NULL,
0, INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE, 0);
if (hInternetFile == NULL)
{
do
some error processing;
quit;
}
//download the file to c:\deleteme
f = CreateFile("c:\\deleteme", GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (f == INVALID_HANDLE_VALUE)
{
do
some error processing;
quit;
}
while (InternetReadFile(hInternetFile, (LPVOID)szTemp, 1024, &dwRead))
{
if (!dwRead)
break;
WriteFile(f, (LPVOID)szTemp, dwRead, &dwWritten, NULL);
}
CloseHandle(f);
//if the strURL is a URL to a file on the ftp server, we get the file
//and store it in c:\deleteme.
//if the strURL is a URL to a directory on the ftp server, c:\deleteme
//will be a HTML page of the directory listing. You will have to parse
//the html page, and construct new URLs, and call the above code again.
Gdy połączenie między klientem a serwerem FTP jest bezpośrednie lub za pośrednictwem serwera proxy FTP TIS, InternetOpenUrl
i InternetReadFile
w rzeczywistości generują ruch FTP zamiast ruchu HTTP.
Powyższe omówienie dotyczące używania interfejsów API Wininet z serwerem proxy opartym na protokole CERN dotyczy również języka GOPHER. Należy również pamiętać, że interfejsy API wininet obsługują tylko adresy URL HTTP, HTTPS, FTP i GOPHER. W przypadku adresów URL plików, takich jak file://server/share/file lub file://\\server\share\file, należy użyć interfejsów API Win32, takich jak FileCopy, aby pobrać plik na komputer kliencki lub FindFirstFile, FindNextFile i FindClose, aby wyliczyć katalog.