Article ID: 166961 - Last Review: July 1, 2004 - Revision: 1.1 How To FTP with CERN-Based Proxy Using WinInet APIThis article was previously published under Q166961 SUMMARY
A CERN-based Web proxy server uses HTTP for all communications with its
clients. Therefore the FTP set of Wininet functions cannot be used to
download resources on a FTP server if the FTP server is accessed through a
CERN-based proxy on the client behalf. Instead, the client has to use
general Wininet functions such as InternetOpenUrl and InternetReadFile to
properly retrieve the data from the HTTP stream sent from the CERN-based
proxy server.
MORE INFORMATION
CERN-compatible proxy services support HTTP (WWW), FTP, and Gopher
requests. But the communication between the CERN-based proxy server and its
clients uses HTTP only. The following diagram show how a FTP request is
forwarded using a CERN-compatible proxy service:
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
If the FTP URL passed in InternetOpenUrl is a URL to a file on the FTP server, you can use InternetReadFile to read the entire file content. If the FTP URL passed in InternetOpenUrl is a URL to a directory on the FTP server, InternetReadFile retrieves a directory listing of the FTP URL as a HTML document. In both cases you may have to loop calling InternetReadFile until all data in the HTTP stream are read. If the client intends to retrieve anything further below the FTP directory URL, it has to parse the HTML document to get URLs to sub-directories or files and issue more InternetOpenUrl and InternetReadFile calls. Also when a CERN-based proxy is used, the INTERNET_FLAG_RAW_DATA flag should not be specified in the InternetOpenUrl call. The following pseudo code demonstrates how to call InternetOpenUrl and InternetReadFile when a CERN-based proxy server is used to access an FTP server: The following pseudo code demonstrates how to call InternetOpenUrl and InternetReadFile when the INTERNET_FLAG_RAW_DATA flag is specified in the InternetOpenUrl call: The above discussion regarding using Wininet APIs with CERN-based proxy applies to GOPHER as well. Also it is important to note that Wininet APIs support HTTP, HTTPS, FTP and GOPHER URLs only. For FILE URLs such as file://server/share/file or file://\\server\share\file, you need to use Win32 APIs such as FileCopy to download the file to the client machine, or FindFirstFile, FindNextFile, and FindClose to enumerate a directory. | Article Translations
|
Back to the top
