vs2019配置libcurl环境

news2024/11/26 14:56:05

一、libcurl下载地址:curl - Download

二、解压下载的压缩包,进入projects\Windows\VC14目录

三、用vs2019打开curl-all.sln工程,选择LIB Debug,x64进行编译

编译后的文件为:curl-8.2.1\build\Win64\VC14\LIB Debug\libcurld.lib

四、新建测试工程,依次添加如下配置

五、测试代码

// testlibcurl.cpp: 定义应用程序的入口点。
//

#include <iostream>
#include "curl/curl.h"
#include <future>
#include <string>
#include <sstream>
#include <stdexcept>

using namespace std;

size_t write_data(void* buffer, size_t size, size_t nmemb, void* userp)
{

    //将void* 指针转换成char* 指针, 并且读取对应长度
    std::string data((char*)buffer, size * nmemb);
    //输出到开发者设置的数据类型中, 这里是stringstream
    *((std::stringstream*)userp) << data << std::endl;

    return  size * nmemb;
}


std::string network(const std::string& url)
{
    //创建一个easy_handle, 不要在线程直接共享easy_handle
    CURL* easy_handle = curl_easy_init();

    //数据输出存储的对象
    std::stringstream out;

    //检查是否创建成功
    if (easy_handle == NULL)
    {
        //抛出错误异常
        throw std::runtime_error("create easy_handle fail");
    }

    curl_easy_setopt(easy_handle, CURLOPT_URL, url.c_str());

    //如果不提供这样的回调函数,那个curl只是简单的把数据输出到标准输出流中
    curl_easy_setopt(easy_handle, CURLOPT_WRITEFUNCTION, &write_data);

    //绑定数据输出
    curl_easy_setopt(easy_handle, CURLOPT_WRITEDATA, &out);

    //开始进行请求
    curl_easy_perform(easy_handle);

    //清理curl_easy
    curl_easy_cleanup(easy_handle);

    return out.str();
}

void printRet(std::future<std::string>& future)
{
    //异常处理
    try {
        //获取请求的结果,为了避免住主线程堵塞, 我们在子线程中等待结果完成
        std::string ret = future.get();
        //输出结果
        std::cout << "curl result:" << ret << std::endl;
    }
    catch (std::exception& e)
    {
        e.what();
    }
}

int main()
{
    curl_global_init(CURL_GLOBAL_ALL);
    //2.请求地址
    std::string url = "http://www.baidu.com";
    //3.这里我们使用异步来处理网络请求的任务
    std::packaged_task<std::string(std::string)> task(network);
    std::future<std::string> ret = task.get_future();


    //4.将任务移新的线程中去, std::move, std::ref 分别对应右值移动, 和引用绑定
    std::thread t = std::thread(std::move(task), std::ref(url));

    //5.开辟另外一个线程处理数据
    std::thread t2 = std::thread(std::move(printRet), std::ref(ret));

    //6.等待子线程处理任务完成
    t.join();
    t2.join();

    //7.清理全局curl
    curl_global_cleanup();
    cout << "Hello CMake." << endl;
    return 0;
}

六、编译成功

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1048178.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【c语言中的字符串相关方法介绍】

C语言中有许多字符串相关的函数&#xff0c;用于处理字符串的创建、修改、查找和比较等操作。以下是一些常见的字符串相关函数以及它们的使用方法&#xff1a; strlen&#xff08;字符串长度&#xff09;&#xff1a;用于计算字符串的长度&#xff0c;不包括字符串末尾的空字符…

【AI视野·今日Robot 机器人论文速览 第四十三期】Thu, 28 Sep 2023

AI视野今日CS.Robotics 机器人学论文速览 Thu, 28 Sep 2023 Totally 37 papers &#x1f449;上期速览✈更多精彩请移步主页 Interesting: &#x1f4da;****触觉力控学习策略,基于触觉的主动推理与力控用于小孔插入任务。提出了姿态控制与插入控制双策略模型。 (from 东京大学…

京东数据平台:2023年8月京东白酒行业品牌销售排行榜

鲸参谋监测的京东平台8月份白酒市场销售数据已出炉&#xff01; 根据鲸参谋平台的数据显示&#xff0c;今年8月份&#xff0c;白酒市场的销量为198万&#xff0c;环比下滑约6%&#xff0c;同比下滑不足1%&#xff1b;销售额为15亿&#xff0c;环比下滑约18%&#xff0c;同比则…

c++ | makefile | 编译 | 链接库

简单记一下 看着人家总结的挺好的 点这

面试问到MySQL模块划分与架构体系怎么办

面试问到Mysql模块划分与架构体系怎么办 文章目录 1. 应用层连接管理器&#xff08;Connection Manager&#xff09;安全性和权限模块&#xff08;Security and Privilege Module&#xff09; 2. MySQL服务器层2.1. 服务支持和工具集2.2. SQL Interface2.3. 解析器举个解析器 …

ChatGPT社交时代降临!Meta在三大平台,集成28个生成式AI!

9月28日&#xff0c;全球社交、科技巨头Meta&#xff08;前身是Facebook&#xff09;在官网宣布&#xff0c;在旗下的Instagram、WhatsApp和Messenger三大社交平台中&#xff0c;集成28个生成式AI聊天机器人。 据悉&#xff0c;这些AI机器人是基于Meta最新发布的大语言模型Lla…

力扣-349.两个数组的交集

Idea 使用两个哈希集合&#xff0c;其中一个用来存储第一个数组&#xff0c;第二个来存储两个数组的交集&#xff0c;因为集合自带去重功能&#xff0c;因此最后用数组来接收就好了 AC Code class Solution { public:vector<int> intersection(vector<int>& n…

自动化测试框架总结

前言 自动化测试框架是一套工具、库和规范的集合&#xff0c;用于支持和简化自动化测试的开发、执行和管理。 提供一种结构化的方法来编写、组织和执行自动化测试用例&#xff0c;并提供一些常用的功能和工具&#xff0c;例如测试用例管理、结果报告生成、测试数据管理、日志…

17周年庆第一弹|中秋·国庆双节大促购物指南,给力狂欢!

随着中秋和国庆双节的来临,百脑汇广州店为了满足消费者的购物需求,特别推出了本次17周年店庆月:双节大促购物指南。本指南将为您介绍百脑汇广州店的优惠购机活动、热门商品等等,帮助您在本次17周年店庆月中获得更好的体验。 百脑汇广州店17周年店庆月第一弹:中秋国庆双节大促中…

【面试经典 150 | 滑动窗口】串联所有单词的子串

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;两个哈希表方法二&#xff1a;滑动窗口 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一…

【图论C++】树的重心——教父POJ 3107(链式前向星的使用)

》》》算法竞赛 /*** file * author jUicE_g2R(qq:3406291309)————彬(bin-必应)* 一个某双流一大学通信与信息专业大二在读 * * brief 一直在竞赛算法学习的路上* * copyright 2023.9* COPYRIGHT 原创技术笔记&#xff1a;转载…

$nextTick解决echarts宽度固定为100%的问题

问题描述:vue+element项目中使用到了tab切换选项卡,其中有一个tab下的内容是echarts,出现了echarts宽度缩减为100px无法继承100%属性。 问题: echarts渲染时tab选项卡display为none,所以width:100%没有可继承项,被echarts自带方法切割成100px。 我他喵的解决这个问题还是…

给 shell 自定义快捷键

shell 快捷键原理 本质上对于 shell 来说只有输入输出&#xff0c;它不会监听你系统快捷键的&#xff0c;监听快捷键其实是终端模拟器的责任&#xff0c;他会将你输入的快捷键转换成字符串序列。当我们使用了类似 ctrl -> 这样的快捷键&#xff0c;shell 会根据你输入的字…

QT的ui设计中改变样式表的用法

在QT的ui设计中,我们右键会弹出一个改变样式表的选项,很多人不知道这个是干什么的。 首先我们来看下具体的界面 首先我们说一下这个功能具体是干嘛的, 我们在设置很多控件在界面上之后,常常都是使用系统默认的样式,但是当有些时候为了美化界面我们需要对一些控件进行美化…

进阶JS-内置构造函数

基本数据类型&#xff1a;string、number、boolean、undefined、null 引用类型:对象 其实字符串、数值、布尔等基本类型也都有专门的构造函数&#xff0c;这些我们称为包装类型。 JS中几乎所有的数据都可以基于构成函数创建。 const str andy//其实是const strnew String(a…

【EI会议征稿】第三届机械、建模与材料工程国际学术会议(I3ME 2023)

第三届机械、建模与材料工程国际学术会议&#xff08;I3ME 2023&#xff09; 2023 3rd International Conference on Mechanical, Modeling and Materials Engineering 第三届机械、建模与材料工程国际学术会议&#xff08;I3ME 2023&#xff09;将于2023年12月1-3日在中国长春…

一套成熟的Spring Cloud智慧工地平台源码,自主版权,开箱即用

智慧工地云平台源码 APP端PC端数据大屏端全套源码 自主版权&#xff0c;开箱即可项目使用 智慧工地利用移动互联、物联网、云计算、大数据等新一代信息技术&#xff0c;彻底改变传统施工现场各参建方的交互方式、工作方式和管理模式&#xff0c;为建设集团、施工企业、监理单位…

第二证券:券商近期关注点浮现 扎堆调研19只个股 上调旅游股评级

19只个股 被券商扎堆调研 东方财富Choice数据显现&#xff0c;9月以来券商保持高强度的调研节奏&#xff0c;19只个股获得超25家券商扎堆调研&#xff0c;首要会合在半导体、医药生物、新能源、机械设备等范畴。人气最高的股票分别是埃斯顿、周大生、南网科技、卫星化学、宁波…

11.1Spring基础(核心概念,创建和使用,简单读取)

一.Spring概念: 1.Spring就是包含了众多工具方法的IoC容器. 2.IoC容器:控制反转,指的是对象的生命周期,将对象的生命周期(什么时候创建,销毁)交给Spring进行管理. 在传统开发中,如果A类依赖B类,会在A类中创建B类的实例,如果B类增加一个属性,那么使用B类的构造方法需要修改代码…