日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C/C++: libcurl获取网页内容

發(fā)布時間:2025/3/18 c/c++ 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C/C++: libcurl获取网页内容 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

2019獨角獸企業(yè)重金招聘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 -pthread

C++版本

有一個封裝的庫: https://github.com/jpbarrette/curlpp

轉(zhuǎn)載于:https://my.oschina.net/letiantian/blog/754592

總結

以上是生活随笔為你收集整理的C/C++: libcurl获取网页内容的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。