linux curl 请求https下载数据

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <curl/curl.h>
#define FILE_PATH   "/tmp/test.dat"
#define TEST_URL    "https://my.aliyuncs.com/testdata/test.dat" //服务器访问URL
static FILE *fp_aui = NULL;

static size_t curldemo_receive_callback( char *ptr, size_t size, size_t nmemb, void *userdata)
{
    
        
	printf("curldemo_receive_callback: size:%d, nmemb:%d\n", size,  nmemb);    
	int len = nmemb * size;    
	fwrite(ptr, size, nmemb, fp_aui);
    	return len;
}

size_t curldemo_send_callback(void *ptr, size_t size, size_t nmemb, void *stream) 
{
    
        printf("curldemo_send_callback: size:%d, nmemb:%d\n", size,  nmemb);
    return nmemb; 
}

static int curdemo_progress_callback(void *clientp, double dltotal, double dlnow, double ultotal, double ulnow)  
{
    
          
	printf("curdemo_progress_callback\n");    
	if ( dltotal > -0.1 && dltotal < 0.1 )     		
		return 0;
    	int progress = (int)((dlnow/dltotal)*100);    
    	printf("progress:%d\n", progress);
    	return 0; 
}
     

int main(int argc, char*argv[]){
    
        printf("------------cURL Demo-------------\n");
    CURL* curl = NULL;    CURLcode res;
    fp_aui = fopen(FILE_PATH, "wb");    
    if (NULL == fp_aui) {
    
            
    printf("open:file :%s error\n", FILE_PATH);        
    goto exit;   
    }
    curl_global_init(CURL_GLOBAL_DEFAULT);
    curl = curl_easy_init();    
    if(curl) {
    
            
    curl_easy_setopt(curl, CURLOPT_URL, TEST_URL);
    // 设置跳过SSL    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);  
     // 设置重定向的最大次数      curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 5);          // 设置301、302跳转跟随location      curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);      curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0);  
    // curl_easy_setopt(curl, CURLOPT_READFUNCTION, curldemo_send_callback);    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &curldemo_receive_callback);
    //设置进度回调函数      curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, curdemo_progress_callback);  

    /* Perform the request, res will get the return code */    res = curl_easy_perform(curl);
    /* Check for errors */   
     if(res != CURLE_OK)      
     fprintf(stderr, "curl_easy_perform() failed: %s\n",            curl_easy_strerror(res));
        /* always cleanup */      
          curl_easy_cleanup(curl);   
         }
    curl_global_cleanup();
    if (NULL != fp_aui) {
    
           
     fclose(fp_aui);        
     fp_aui = NULL; 
     }
exit: 
 return 0;
}

猜你喜欢

转载自blog.csdn.net/u013420428/article/details/106543340