美文网首页
libcurl读取网页数据到内存中

libcurl读取网页数据到内存中

作者: 杨闯 | 来源:发表于2019-03-01 15:30 被阅读0次
#include <stdlib.h>
#include <stdio.h>
#include <curl/curl.h>
#include <curl/easy.h>
#include <string>
#include <iostream>
using namespace std;
static char errorBuffer[1024];

static void startChoice() {
    string                     buffer;
    CURLcode                   code;
    CURL*                      curl = NULL;
    const char* url = "www.baidu.com";
    code = curl_global_init(CURL_GLOBAL_DEFAULT);
    printf("code = %d\n", code);
    curl = curl_easy_init();
    if(!init(curl, url, &buffer))
    {
        fprintf(stderr, "Connection initializion failed\n");
        exit(EXIT_FAILURE);
        
    }
    code = curl_easy_perform(curl);
    if (code != CURLE_OK)
    {
        fprintf(stderr, "Failed to get '%s' [%s]\n", url, errorBuffer);
        exit(EXIT_FAILURE);
        
    }
    curl_easy_cleanup(curl);
    printf("%s\n",buffer.c_str());
}

static bool init(CURL *&curl, const char *url, string *p_buffer)
{
    CURLcode code;
    curl = curl_easy_init();
    if (curl == NULL)
    {
        fprintf(stderr, "Failed to create CURL connection\n");
        exit(EXIT_FAILURE);
    }
    code = curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errorBuffer);
    if (code != CURLE_OK)
    {
        fprintf(stderr, "Failed to set error buffer [%d]\n", code);
        return false;
    }
    code = curl_easy_setopt(curl, CURLOPT_URL, url);
    if (code != CURLE_OK)
    {
        fprintf(stderr, "Failed to set URL [%s]\n", errorBuffer);
        return false;
    }
    code = curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
    if (code != CURLE_OK)
    {
        fprintf(stderr, "Failed to set writer [%s]\n", errorBuffer);
        return false;
    }
    code = curl_easy_setopt(curl, CURLOPT_WRITEDATA, p_buffer);
    if (code != CURLE_OK)
    {
        fprintf(stderr, "Failed to set write data [%s]\n", errorBuffer);
        return false;
    }
    return true;
}

static 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;
}

相关文章

  • libcurl读取网页数据到内存中

  • IO流——节点流

    定义 输入Input:读取外部数据(磁盘,光盘等存储设备的数据)到程序(内存)中。 输出output:将程序(内存...

  • java之IO流

    输入流:将外设中的数据读取到内存中输出流:将内存中的数据读取到外设中 字符流的由来:其实就是字节流读取文字字节数据...

  • Java 序列化

    1. Java 原生序列化 序列化:把内存中数据写入文件中 反序列化:从文件中读取数据到内存中 使用流传输对象的过...

  • R语言-02读取数据

    从剪贴板中读取数据 大数据读取 从大文件中读取数据,scan的妙用 避免数据过大程序运行内存不够的问题,用磁盘代替...

  • CPU缓存机制

    CPU缓存机制:CPU从内存中读取数据时会把该内存地址后面的一部分数据也缓存进去。 因为CPU中的读取速度是比内存...

  • 基于读写锁实现一个内存缓存器

    首先实现定时任务读取数据库信息到内存: 接下来就是从内存中取数据: 参考博客:1.https://www.jian...

  • 012-内存分析(缓存命中率)

    缓存主要是把经常访问的数据(热点数据),提前读入到内存中。这样,下次访问时,就可以直接从内存读取数据,而不需要经过...

  • 深入解析Java--变量

    变量 使用变量是为了解决问题,解决内存中的数据读取比较麻烦这一问题,因为计算机读取内存中的数据时,是通过内存地址地...

  • 文件操作

    读取和写入:文件有内容读取就是将文件中的内容读取到内存中。写入就是将内存中的内容写入到磁盘文件中。内存就相当于你的...

网友评论

      本文标题:libcurl读取网页数据到内存中

      本文链接:https://www.haomeiwen.com/subject/npxkuqtx.html