4.4 libcurl 案例

(1) 获取html网页

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <curl/curl.h>

int main(int argc, char *argv[])
{

    CURL *curl;     //定义CURL指针
    CURLcode res;   //定义CURLcode类型的变量,保存返回状态码

    if (argc != 2) {
        printf("Usage: ./a.out <url>\n");
        exit(1);
    }
    curl = curl_easy_init();

    if (curl != NULL) {
                 //设置curl选项. 其中CURLOPT_URL是让用户指定url. argv[1]中存放的命令行传进来的网址
                curl_easy_setopt(curl, CURLOPT_URL, argv[1]);

                //调用curl_easy_perform 执行我们的设置.并进行相关的操作. 在这里只在屏幕上显示出来.
                res = curl_easy_perform(curl);
                if (res != CURLE_OK) {
                    printf("curl easy perform error\n");
                }

                //清除curl操作.
                curl_easy_cleanup(curl);
    }

    return 0;
}
 gcc -Wall test1_downhtml.c -o test1 -lcurl

 ./test1 www.baidu.com

(2)、网页下载保存

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>

#include <curl/curl.h>

size_t write_data( void *ptr, size_t size, size_t nmemb, void *stream)
{
    FILE *fp = (FILE*)stream;

    int writen = fwrite(ptr, size, nmemb, fp);

    return writen;
}

int main(int argc, char *argv[])
{
    CURL *curl = NULL;
    FILE *fp = NULL;

    if (argc != 3) {
        printf("Usage: ./a.out <url> <file>\n");
        exit(1);
    }

    curl_global_init(CURL_GLOBAL_ALL);


    curl = curl_easy_init();

    curl_easy_setopt(curl, CURLOPT_URL, argv[1]);

    if ((fp = fopen(argv[2], "w")) == NULL) {
        printf("fopen error\n");
        goto END;
    }


    //CURLOPT_WRITEFUNCTION 将后继的动作交给write_data函数处理
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);

    curl_easy_perform(curl);

 END:
    curl_easy_cleanup(curl);

    curl_global_cleanup();


    return 0;
}
 gcc -Wall test2_download_html.c -o test2 -lcurl
./test2 www.baidu.com baidu.html

(3)、GET请求

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <curl/curl.h>

int main(int argc, char *argv[])
{

    CURL *curl = NULL;

    curl = curl_easy_init();

    curl_easy_setopt(curl, CURLOPT_URL, "127.0.0.1:8080/?username=ldb&passwd=123456");
    //将返回的http头 输出到标准输出上
    curl_easy_setopt(curl, CURLOPT_HEADERDATA, stdout);
    //将返回的get请求数据,输出到标准输出上
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, stdout);
    curl_easy_perform(curl);

    curl_easy_cleanup(curl);

    return 0;
}

(4)、POST请求

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <curl/curl.h>

#define POSTURL "http://127.0.0.1:8080/login"
#define POSTFIELDS "{\"username\":\"liudanbing\", \"passwd\":\"123456\", \"type\":1}"
#define FILENAME "curlpost.log"


size_t write_data(void *buffer, size_t size, size_t nmemb, void *userp)
{
    FILE *fptr = (FILE*)userp;
    int ret = 0;
    ret = fwrite(buffer, size, nmemb, fptr);

    return ret;
}

int main(int argc, char *argv[])
{
    CURL *curl;
    CURLcode res;
    FILE *fptr;


    if ((fptr = fopen(FILENAME, "w")) == NULL) {
        fprintf(stderr, "fopen file error: %s\n", FILENAME);
        exit(1);
    }

    curl = curl_easy_init();
    //URL地址
    curl_easy_setopt(curl, CURLOPT_URL, POSTURL);
    //Post 数据
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, POSTFIELDS);
    //对返回的数据进行操作的函数地址
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
    //设置WRITEFUNCTION的第四个参数值
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, fptr);
    //设置为非0表示本次操作为POST
    curl_easy_setopt(curl, CURLOPT_POST, 1);
    // 设置为非0在执行时打印请求信息
    curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
    //设置为非0将响应头信息同响应体一起传给WRITEFUNCTION
    curl_easy_setopt(curl, CURLOPT_HEADER, 1);
    //设置为非0,响应头信息Location
    curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
    //设置对应的COOKIEFILE路径
    curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "./libcurl.cookie");

    res = curl_easy_perform(curl);

    if (res != CURLE_OK ) {
        fprintf(stderr, "post perform error\n");
        exit(1);
    }
    curl_easy_cleanup(curl);

    return 0;
}

results matching ""

    No results matching ""