首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过CURL.h将网页打印到控制台

通过CURL.h将网页打印到控制台
EN

Stack Overflow用户
提问于 2015-12-15 14:08:44
回答 2查看 373关注 0票数 0

在前面的线程Building curl 7.46.0之后,我测试了下面的示例代码,它没有错误地编译,但在我的控制台上没有打印任何内容。

代码语言:javascript
复制
#include <iostream>
#include <WinSock2.h>
#include <stdio.h> 
#include <curl/curl.h>  

int main(void) {
    CURL *curl;  
    CURLcode res;
    curl = curl_easy_init(); 
    if (curl) {
        curl_easy_setopt(curl, CURLOPT_URL, "http://www.cnn.com/");    
        system("pause");
        res = curl_easy_perform(curl);
        /* always cleanup */     curl_easy_cleanup(curl);
    }   
    //system("pause");
    return 0;
}

这是由于安装libcurl时采用的设置造成的吗?事实上,为了获得libcurl.dlllibcurl.lib,我使用了:

1 -(发布模式):nmake /f Makefile.vc mode=dll VC=12

2 -(调试模式):nmake /f Makefile.vc mode=dll VC=12 DEBUG=yes

最好的

期望:有点像

编辑:有效代码

代码语言:javascript
复制
#include<string>
#include <WinSock2.h>
#include <stdio.h> 
#include <curl/curl.h>  

int main(void)
{
CURL *curl = curl_easy_init();
if (curl) {
    CURLcode res;
    curl_easy_setopt(curl, CURLOPT_URL, "http://edition.cnn.com/");
    res = curl_easy_perform(curl);
    curl_easy_cleanup(curl);
    system("pause");
}
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-15 15:15:09

的文件

setopt.html

建议,您需要指定一个回调函数,它将将html写入某个缓冲区。然后,您可以使用该缓冲区打印内容。以下是你是如何做到的:

代码语言:javascript
复制
#include <iostream>
#include <WinSock2.h>
#include <stdio.h> 
#include <curl/curl.h>
#include <string>

static size_t getHtmlCallback(void *contents, size_t size, size_t nmemb, void *ptr)
{
    // Cast ptr to std::string pointer and append contents to that string
    ((std::string*)ptr)->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main(void)
{
    CURL *curl;
    CURLcode res;
    std::string htmlBuffer;

    curl = curl_easy_init();
    if(curl) {
        curl_easy_setopt(curl, CURLOPT_URL, "http://www.cnn.com/");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, getHtmlCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &htmlBuffer);
        res = curl_easy_perform(curl);
        if(CURLE_OK == res)
        {
            std::cout << htmlBuffer << std::endl;
        }
        curl_easy_cleanup(curl);
    }

    return 0;
}
票数 0
EN

Stack Overflow用户

发布于 2015-12-15 15:17:31

看来libcurl正在失败(即curl_easy_init正在返回NULL)。可悲的是,根据http://curl.haxx.se/mail/lib-2009-11/0243.html的说法,你必须使用调试器来找出原因。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34291334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档