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;
CURLcode res;
if (argc != 2) {
printf("Usage: ./a.out <url>\n");
exit(1);
}
curl = curl_easy_init();
if (curl != NULL) {
curl_easy_setopt(curl, CURLOPT_URL, argv[1]);
res = curl_easy_perform(curl);
if (res != CURLE_OK) {
printf("curl easy perform error\n");
}
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;
}
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");
curl_easy_setopt(curl, CURLOPT_HEADERDATA, stdout);
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();
curl_easy_setopt(curl, CURLOPT_URL, POSTURL);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, POSTFIELDS);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fptr);
curl_easy_setopt(curl, CURLOPT_POST, 1);
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
curl_easy_setopt(curl, CURLOPT_HEADER, 1);
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
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;
}