libcurl 文件下载

直接上代码:

size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) 
{
    size_t written = fwrite(ptr, size, nmemb, stream);
    return written;
}

int http_get_upgrade_file(const char* file_name, const char* url)
{
    CURL *curl;
    CURLcode __attribute__ ((unused)) res;
    FILE *fp;
    curl = curl_easy_init();
    int httpcode = -1;
    if(curl)
    {
        fp = fopen(file_name,"wb");
        curl_easy_setopt(curl, CURLOPT_URL, url);
        if(strstr(url,"https"))
        {
            curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https");
            curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
            curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
        }
        else
        {
            curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "http");
        }
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
        curl_easy_setopt(curl, CURLOPT_TIMEOUT, 60L);
        curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 60L);
        res = curl_easy_perform(curl);
        if(fp)
        {
            fclose(fp);
        }
        curl_easy_getinfo(curl, CURLINFO_HTTP_CODE, &httpcode);
        curl_easy_cleanup(curl);
    }

    if (httpcode != 200)
    {
        printf("HttpCode error:%d try to check ip\n", httpcode);
        return -1;
    }
    return 0;
}

判断是HTTP还是https这里不太严谨,不过正常使用问题不大。

posted @ 2022-09-05 19:01  Smah  阅读(342)  评论(0编辑  收藏  举报