/* Prevent warnings on Visual Studio */ struct _RPC_ASYNC_STATE; #include "curl/curl.h" #include #include int GetFtpFile(void) { int retVal = 0; CURL *curl; CURLcode res; curl = curl_easy_init(); if(curl) { /* Get curl 7.9.2 from sunet.se's FTP site: */ curl_easy_setopt(curl, CURLOPT_VERBOSE, 1); curl_easy_setopt(curl, CURLOPT_HEADER, 1); curl_easy_setopt(curl, CURLOPT_URL, "ftp://public.kitware.com/pub/cmake/cygwin/setup.hint"); res = curl_easy_perform(curl); if ( res != 0 ) { printf("Error fetching: ftp://public.kitware.com/pub/cmake/cygwin/setup.hint\n"); retVal = 1; } /* always cleanup */ curl_easy_cleanup(curl); } else { printf("Cannot create curl object\n"); retVal = 1; } return retVal; } int GetWebFiles(char *url1, char *url2) { int retVal = 0; CURL *curl; CURLcode res; char proxy[1024]; int proxy_type = 0; if ( getenv("HTTP_PROXY") ) { proxy_type = 1; if (getenv("HTTP_PROXY_PORT") ) { sprintf(proxy, "%s:%s", getenv("HTTP_PROXY"), getenv("HTTP_PROXY_PORT")); } else { sprintf(proxy, "%s", getenv("HTTP_PROXY")); } if ( getenv("HTTP_PROXY_TYPE") ) { /* HTTP/SOCKS4/SOCKS5 */ if ( strcmp(getenv("HTTP_PROXY_TYPE"), "HTTP") == 0 ) { proxy_type = 1; } else if ( strcmp(getenv("HTTP_PROXY_TYPE"), "SOCKS4") == 0 ) { proxy_type = 2; } else if ( strcmp(getenv("HTTP_PROXY_TYPE"), "SOCKS5") == 0 ) { proxy_type = 3; } } } curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_VERBOSE, 1); curl_easy_setopt(curl, CURLOPT_HEADER, 1); /* Using proxy */ if ( proxy_type > 0 ) { curl_easy_setopt(curl, CURLOPT_PROXY, proxy); switch (proxy_type) { case 2: curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4); break; case 3: curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); break; default: curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_HTTP); } } /* get the first document */ curl_easy_setopt(curl, CURLOPT_URL, url1); res = curl_easy_perform(curl); if ( res != 0 ) { printf("Error fetching: %s\n", url1); retVal = 1; } /* get another document from the same server using the same connection */ /* avoid warnings about url2 since below block is commented out: */ (void) url2; /* curl_easy_setopt(curl, CURLOPT_URL, url2); res = curl_easy_perform(curl); if ( res != 0 ) { printf("Error fetching: %s\n", url2); retVal = 1; } */ /* always cleanup */ curl_easy_cleanup(curl); } else { printf("Cannot create curl object\n"); retVal = 1; } return retVal; } int main(int argc, char **argv) { int retVal = 0; curl_global_init(CURL_GLOBAL_DEFAULT); if(argc>1) { retVal += GetWebFiles(argv[1], 0); } else { printf("error: first argument should be a url to download\n"); retVal = 1; } /* Do not check the output of FTP socks5 cannot handle FTP yet */ /* GetFtpFile(); */ /* do not test ftp right now because we don't enable that port */ curl_global_cleanup(); return retVal; }