通过libcurl读取网页数据到内存中,以备进一步处理。
关键代码:
BOOL readToContentBuff(const char* url, string& content) {
CURL* conn = NULL;
CURLcode code = CURLE_FAILED_INIT;
char errorBuffer[CURL_ERROR_SIZE];
//
conn = curl_easy_init();
if (conn == NULL) {
goto EXIT_CODE_READTOCONTENTBUFF;
}
//
code = curl_easy_setopt(conn, CURLOPT_URL, url);
if (code != CURLE_OK) {
goto EXIT_CODE_READTOCONTENTBUFF;
}
//
code = curl_easy_setopt(conn, CURLOPT_ERRORBUFFER, errorBuffer);
if (code != CURLE_OK) {
goto EXIT_CODE_READTOCONTENTBUFF;
}
//
code = curl_easy_setopt(conn, CURLOPT_FOLLOWLOCATION, 1);
if (code != CURLE_OK) {
goto EXIT_CODE_READTOCONTENTBUFF;
}
//
code = curl_easy_setopt(conn, CURLOPT_WRITEFUNCTION, writer);
if (code != CURLE_OK) {
goto EXIT_CODE_READTOCONTENTBUFF;
}
//
code = curl_easy_setopt(conn, CURLOPT_WRITEDATA, &content);
if (code != CURLE_OK) {
goto EXIT_CODE_READTOCONTENTBUFF;
}
//
code = curl_easy_perform(conn);
if (code != CURLE_OK) {
goto EXIT_CODE_READTOCONTENTBUFF;
}
//
EXIT_CODE_READTOCONTENTBUFF:
if (conn) {
curl_easy_cleanup(conn);
}
return (code == CURLE_OK);
}
其中witer函数的具体代码,如下:
int writer(char *data, size_t size, size_t nmemb, string *writerData) {
unsigned long sizes = size * nmemb;
if (writerData == NULL) {
return 0;
}
writerData->append(data, sizes);
return sizes;
}
// Mylaf
// 2017-08-10 2010