libcurl

来源:互联网 发布:淘宝抢购秒杀神器 编辑:程序博客网 时间:2024/04/30 01:01
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <curl/curl.h>
#include <curl/types.h>
#include <curl/easy.h>
#include <pthread.h>
#include <string.h>

struct bkinfo{
    char url[1024];
    char file[1024];
};
//struct bkinfo cu;
FILE *curlfp;
//这个函数是为了符合CURLOPT_WRITEFUNCTION而构造的
//完成数据保存功能
size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream)
{
    //printf("************************\n%s\n",(char *)ptr);
    //FILE *fp=(FILE *)stream;
    if(*(char *)ptr=='N') { //空类型指针强制转化成字符型
        printf("null\n");
        return;
    }    
    int written = fwrite(ptr, size, nmemb, curlfp);
    return written;
}

void libc_func(void *arg)
{
    //struct bkinfo cu=(struct bkinfo)arg;
    if((char*)arg==NULL)return;
    char url[900],file[100];
    char *p;
    p=strstr((char*)arg,"\n");
    if(p==NULL)return;
    strncpy(url,(char*)arg,p-(char*)arg);
    url[p-(char*)arg]='\0';
    strcpy(file,p+1);
    printf("OK:%s\n%s\n",url,file);
    
    while(1){
        printf("begin\n");
        //printf("%s \n",(char*)arg);
        
        CURL *curl;
        curl_global_init(CURL_GLOBAL_ALL);
        curl=curl_easy_init();
        curl_easy_setopt(curl,CURLOPT_URL,url);
    //FILE *fp;  //定义FILE类型指针
    if((curlfp=fopen(file,"w"))==NULL){
        curl_easy_cleanup(curl);
        return;
    }      
////CURLOPT_WRITEFUNCTION 将后继的动作交给write_data函数处理
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
    curl_easy_perform(curl);
        fclose(curlfp);
    curl_easy_cleanup(curl);
    printf("over\n");
    sleep(6);  //设置循环执行时间间隔
    }  
}
/*
void use_curl(struct bkinfo cu){
    pthread_t lc;
    int ret;
    ret=pthread_create(&lc,NULL,(void *)libc,&cu);
    while(ret!=0){
        ret=pthread_create(&lc,NULL,(void *)libc,&cu);
        //printf("create pthread error!\n");
        return;
    }
}*/


int main()
{
    //三个可改变的值:IP 场所编号 和版本号
    char bkurl[1000]="\0";
    char ip_and_port[100]="\0"; //IP和端口号
    char cscode[100]="\0";  //场所编号
    char vernum[100]="\0";   //版本号
    char filename[100]="\0";
    strcpy(filename,"./curl.txt");   //存入的本地文件名
    strcpy(ip_and_port,"192.168.3.50:8088");
    strcpy(cscode,"123456");
    strcpy(vernum,"12");
    strcpy(bkurl,"http://");
    strcat(bkurl,ip_and_port);
    strcat(bkurl,"/iism2/newSetDeployAction.do?code=");
    strcat(bkurl,cscode);
    strcat(bkurl,"&vernum=");
    strcat(bkurl,vernum);  
    strcat(bkurl,"\n");
    strcat(bkurl,filename);
    //printf("111 %s\n %s\n",bkurl,filename);
    /*struct bkinfo cu;
    strcpy(cu.url,bkurl);
    strcpy(cu.file,filename);
    printf("cu info: %s\n %s\n",cu.url,cu.file);*/
    printf("here\n");
    pthread_t lc;
    int ret;
    ret=pthread_create(&lc,NULL,(void *)libc_func,bkurl);
    if(ret!=0){
        printf("create pthread error!\n");
        return;
    }
    pthread_join(lc,NULL);

    return 0;

}
//gcc -o curl curl.c -lpthread -lcurl

//http://192.168.3.50:8088/iism2/newSetDeployAction.do?code=123456&vernum=12


原创粉丝点击