C/C++: libcurl获取网页内容
生活随笔
收集整理的這篇文章主要介紹了
C/C++: libcurl获取网页内容
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2019獨角獸企業重金招聘Python工程師標準>>>
安裝:
$ sudo apt-get install libcurl3 $ sudo apt-get install libcurl4-openssl-dev示例
來自 http://stackoverflow.com/questions/13905774/in-c-how-do-you-use-libcurl-to-read-a-http-response-into-a-string :
#include <stdio.h> #include <curl/curl.h> #include <string.h> #include <stdlib.h>struct url_data {size_t size;char* data; };size_t write_data(void *ptr, size_t size, size_t nmemb, struct url_data *data) {size_t index = data->size;size_t n = (size * nmemb);char* tmp;data->size += (size * nmemb);#ifdef DEBUGfprintf(stderr, "data at %p size=%ld nmemb=%ld\n", ptr, size, nmemb); #endiftmp = (char*)realloc(data->data, data->size + 1); /* +1 for '\0' */if(tmp) {data->data = tmp;} else {if(data->data) {free(data->data);}fprintf(stderr, "Failed to allocate memory.\n");return 0;}memcpy((data->data + index), ptr, n);data->data[data->size] = '\0';return size * nmemb; }char *handle_url(char* url) {CURL *curl;struct url_data data;data.size = 0;data.data = (char*)malloc(4096); /* reasonable size initial buffer */if(NULL == data.data) {fprintf(stderr, "Failed to allocate memory.\n");return NULL;}data.data[0] = '\0';CURLcode res;curl = curl_easy_init();if (curl) {curl_easy_setopt(curl, CURLOPT_URL, url);curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);curl_easy_setopt(curl, CURLOPT_WRITEDATA, &data);res = curl_easy_perform(curl);if(res != CURLE_OK) {fprintf(stderr, "curl_easy_perform() failed: %s\n",curl_easy_strerror(res));}curl_easy_cleanup(curl);}return data.data; }int main(int argc, char* argv[]) {char* data;if(argc < 2) {fprintf(stderr, "Must provide URL to fetch.\n");return 1;}data = handle_url(argv[1]);if(data) {printf("%s\n", data);free(data);}curl_global_cleanup();return 0; }編譯、運行:
$ gcc -g test.c -lcurl $ ./a.out www.baidu.com示例 (多線程)
#include <stdio.h> #include <curl/curl.h> #include <string.h> #include <stdlib.h> #include <thread>struct url_data {size_t size;char* data; };size_t write_data(void *ptr, size_t size, size_t nmemb, struct url_data *data) {size_t index = data->size;size_t n = (size * nmemb);char* tmp;data->size += (size * nmemb);#ifdef DEBUGfprintf(stderr, "data at %p size=%ld nmemb=%ld\n", ptr, size, nmemb); #endiftmp = (char*)realloc(data->data, data->size + 1); /* +1 for '\0' */if(tmp) {data->data = tmp;} else {if(data->data) {free(data->data);}fprintf(stderr, "Failed to allocate memory.\n");return 0;}memcpy((data->data + index), ptr, n);data->data[data->size] = '\0';return size * nmemb; }char *handle_url(char* url) {CURL *curl;struct url_data data;data.size = 0;data.data = (char*)malloc(4096); /* reasonable size initial buffer */if(NULL == data.data) {fprintf(stderr, "Failed to allocate memory.\n");return NULL;}data.data[0] = '\0';CURLcode res;curl = curl_easy_init();if (curl) {curl_easy_setopt(curl, CURLOPT_URL, url);curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);curl_easy_setopt(curl, CURLOPT_WRITEDATA, &data);res = curl_easy_perform(curl);if(res != CURLE_OK) {fprintf(stderr, "curl_easy_perform() failed: %s\n",curl_easy_strerror(res));}curl_easy_cleanup(curl);}return data.data; }void threadFunc() {char *url = "www.baidu.com";char* data;data = handle_url(url);if(data) {printf("%s\n", data);free(data);}}int main(int argc, char* argv[]) {for(int i=0; i<10000; ++i){std::thread *t = new std::thread(threadFunc);t->join();delete t;}curl_global_cleanup();return 0; } g++ -std=c++11 test.cpp -lcurl -pthreadC++版本
有一個封裝的庫: https://github.com/jpbarrette/curlpp
轉載于:https://my.oschina.net/letiantian/blog/754592
總結
以上是生活随笔為你收集整理的C/C++: libcurl获取网页内容的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 通过wifi 连接 adb 到 手机
- 下一篇: Sql Server 查看所有存储过程或