Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Avviso
L'applicazione desktop Internet Explorer 11, ritirata e fuori supporto, è stata disabilitata in modo permanente tramite un aggiornamento di Microsoft Edge su alcune versioni di Windows 10. Per altre informazioni, vedere Domande frequenti sul ritiro delle app desktop di Internet Explorer 11.
Un server proxy Web basato su CERN usa HTTP per tutte le comunicazioni con i client. Pertanto, il set FTP di funzioni Wininet non può essere usato per scaricare le risorse in un server FTP se si accede al server FTP tramite un proxy basato su CERN per conto del client. Al contrario, il client deve usare funzioni Wininet generali, ad InternetOpenUrl
esempio e InternetReadFile
per recuperare correttamente i dati dal flusso HTTP inviato dal server proxy basato su CERN.
Versione originale del prodotto: Internet Explorer
Numero KB originale: 166961
Ulteriori informazioni
I servizi proxy compatibili con CERN supportano le richieste HTTP (WWW), FTP e Gopher. Tuttavia, la comunicazione tra il server proxy basato su CERN e i relativi client usa solo HTTP. Il diagramma seguente mostra come viene inoltrata una richiesta FTP usando un servizio proxy compatibile con 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
Poiché un server proxy basato su CERN comunica con i client in HTTP, non è possibile usare il set FTP di funzioni Wininet se il client accede al server FTP tramite il server proxy. È invece consigliabile usare InternetOpenUrl
e InternetReadFile
per recuperare i dati richiesti dal flusso HTTP inviato dal server proxy.
Se l'URL FTP passato InternetOpenUrl
è un URL di un file nel server FTP, è possibile usare InternetReadFile
per leggere l'intero contenuto del file. Se l'URL FTP passato InternetOpenUrl
è un URL di una directory nel server FTP, InternetReadFile
recupera un elenco di directory dell'URL FTP come documento HTML. In entrambi i casi, potrebbe essere necessario eseguire un ciclo di chiamate InternetReadFile
fino a quando non vengono letti tutti i dati nel flusso HTTP.
Se il client intende recuperare qualsiasi elemento più avanti sotto l'URL della directory FTP, deve analizzare il documento HTML per ottenere gli URL nelle sottodirectory o nei file ed eseguire altre InternetOpenUrl
chiamate e InternetReadFile
. Inoltre, quando viene usato un proxy basato su CERN, il INTERNET_FLAG_RAW_DATA
flag non deve essere specificato nella InternetOpenUrl
chiamata.
Lo pseudocode seguente illustra come chiamare InternetOpenUrl
e InternetReadFile
quando viene usato un server proxy basato su CERN per accedere a un server 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.
Quando il client ha una connessione diretta a un server FTP o è connesso al server FTP tramite un server proxy FTP TIS, la comunicazione da e verso il client si trova in FTP. Il client può specificare il INTERNET_FLAG_RAW_DATA
flag in InternetOpenUrl
e quindi usare InternetFindNextFile
per ottenere una struttura WIN32_FIND_DATA ed enumerare tutte le sottodirectory e i file dell'URL. Il client può anche usare il set FTP di funzioni Wininet in tali situazioni.
Il seguente pseudocodice illustra come chiamare InternetOpenUrl
e InternetReadFile
quando viene specificato il flag INTERNET_FLAG_RAW_DATA
InternetOpenUrl
nella chiamata.
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.
Quando la connessione tra il client e il server FTP è diretta o tramite un proxy InternetOpenUrl
FTP TIS e InternetReadFile
genera effettivamente traffico FTP anziché traffico HTTP.
La discussione precedente sull'uso delle API Wininet con il proxy basato su CERN si applica anche a GOPHER. È anche importante notare che le API Wininet supportano solo URL HTTP, HTTPS, FTP e GOPHER. Per gli URL FILE, ad esempio file://server/share/file o file://\\server\share\file, è necessario usare API Win32 come FileCopy per scaricare il file nel computer client o FindFirstFile, FindNextFile e FindClose per enumerare una directory.