157 cpl_ensure (url, CPL_ERROR_NULL_INPUT, NULL);
158 cpl_ensure (data_length, CPL_ERROR_NULL_INPUT, NULL);
160 cpl_msg_debug (cpl_func,
"Using URL %s", url);
167 struct MemoryStruct chunk;
169 chunk.memory = malloc(1);
172 curl_global_init(CURL_GLOBAL_ALL);
175 curl_handle = curl_easy_init();
178 curl_easy_setopt(curl_handle, CURLOPT_URL, url);
188 curl_easy_setopt(curl_handle, CURLOPT_FAILONERROR, 1L);
190 if(cpl_msg_get_level() == CPL_MSG_DEBUG){
192 curl_easy_setopt(curl_handle, CURLOPT_VERBOSE, 1L);
194 curl_easy_setopt(curl_handle, CURLOPT_NOPROGRESS, 1L);
198 curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
201 curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (
void *)&chunk);
205 curl_easy_setopt(curl_handle, CURLOPT_USERAGENT,
"libcurl-agent/1.0");
208 res = curl_easy_perform(curl_handle);
211 if(res != CURLE_OK) {
215 cpl_error_set_message(cpl_func, CPL_ERROR_DATA_NOT_FOUND,
216 "Could not retrieve data: %s",curl_easy_strerror(res));
217 curl_easy_cleanup(curl_handle);
218 curl_global_cleanup();
230 *data_length = chunk.size;
231 curl_easy_cleanup(curl_handle);
232 curl_global_cleanup();
245 size_t written = fwrite(ptr, size, nmemb, (FILE *)stream);
274 cpl_ensure_code(url, CPL_ERROR_NULL_INPUT);
275 cpl_ensure_code(filename, CPL_ERROR_NULL_INPUT);
277 cpl_msg_debug (cpl_func,
"Using URL %s", url);
278 cpl_msg_debug (cpl_func,
"Using File %s", filename);
284 curl_global_init(CURL_GLOBAL_ALL);
287 curl_handle = curl_easy_init();
290 curl_easy_setopt(curl_handle, CURLOPT_URL, url);
300 curl_easy_setopt(curl_handle, CURLOPT_FAILONERROR, 1L);
302 if(cpl_msg_get_level() == CPL_MSG_DEBUG){
304 curl_easy_setopt(curl_handle, CURLOPT_VERBOSE, 1L);
306 curl_easy_setopt(curl_handle, CURLOPT_NOPROGRESS, 1L);
310 curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, write_data);
313 pagefile = fopen(filename,
"wb");
318 curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, pagefile);
321 res = curl_easy_perform(curl_handle);
323 if(res != CURLE_OK) {
324 curl_easy_cleanup(curl_handle);
325 curl_global_cleanup();
328 return cpl_error_set_message(cpl_func, CPL_ERROR_DATA_NOT_FOUND,
329 "Could not retrieve data: %s",
330 curl_easy_strerror(res));
337 curl_easy_cleanup(curl_handle);
338 curl_global_cleanup();
339 return cpl_error_set_message(cpl_func, CPL_ERROR_FILE_NOT_CREATED,
340 "The file %s could not be created",
345 curl_easy_cleanup(curl_handle);
346 curl_global_cleanup();
348 return cpl_error_get_code();