文档章节

C/C++使用libcurl库发送http请求(get和post可以用于请求html信息,也可以请求xml和json等串)

 花花大千世界
发布于 06/09 15:45
字数 697
阅读 16
收藏 0

C++要实现http网络连接,需要借助第三方库,libcurl使用起来还是很方便的

环境:win32 + vs2015

如果要在linux下使用,用cmake编译,使用基本同理

 

1,下载编译libcurl

下载curl源码,找到vs工程,按照x86 x64 并对应debug和release编译出静态库lib

 

2,构建工程

1)curl头文件和lib拷贝到工程目录

2)配置附加包含目录libcurl中的include和附加库目录libcurl中的lib目录

3)添加预编译宏USE_OPENSSL和CURL_STATICLIB

4)添加附加依赖库

ws2_32.lib
wldap32.lib
crypt32.lib
advapi32.lib
libcurl.lib
注意版本对应

 

3,代码示例

#include <iostream>
#include <string>
#include "curl/curl.h"
using namespace std;
 
#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "wldap32.lib")
#pragma comment(lib, "crypt32.lib")
#pragma comment(lib, "advapi32.lib")
#pragma comment(lib, "libcurl.lib")
 
// reply of the requery
size_t req_reply(void *ptr, size_t size, size_t nmemb, void *stream)
{
    cout << "----->reply" << endl;
    string *str = (string*)stream;
    cout << *str << endl;
    (*str).append((char*)ptr, size*nmemb);
    return size * nmemb;
}
 
// http GET
CURLcode curl_get_req(const std::string &url, std::string &response)
{
    // init curl
    CURL *curl = curl_easy_init();
    // res code
    CURLcode res;
    if (curl)
    {
        // set params
        curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); // url
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false); // if want to use https
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, false); // set peer and host verify false
        curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
        curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, req_reply);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&response);
        curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
        curl_easy_setopt(curl, CURLOPT_HEADER, 1);
        curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 3); // set transport and time out time
        curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3);
        // start req
        res = curl_easy_perform(curl);
    }
    // release curl
    curl_easy_cleanup(curl);
    return res;
}
 
// http POST
CURLcode curl_post_req(const string &url, const string &postParams, string &response)
{
    // init curl
    CURL *curl = curl_easy_init();
    // res code
    CURLcode res;
    if (curl)
    {
        // set params
        curl_easy_setopt(curl, CURLOPT_POST, 1); // post req
        curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); // url
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postParams.c_str()); // params
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false); // if want to use https
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, false); // set peer and host verify false
        curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
        curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, req_reply);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&response);
        curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
        curl_easy_setopt(curl, CURLOPT_HEADER, 1);
        curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 3);
        curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3);
        // start req
        res = curl_easy_perform(curl);
    }
    // release curl
    curl_easy_cleanup(curl);
    return res;
}
 
int main()
{
    // global init
    curl_global_init(CURL_GLOBAL_ALL);
 
    // test get requery
    string getUrlStr = "http://cn.bing.com/images/trending?form=Z9LH";
    string getResponseStr;
    auto res = curl_get_req(getUrlStr, getResponseStr);
    if (res != CURLE_OK)
        cerr << "curl_easy_perform() failed: " + string(curl_easy_strerror(res)) << endl;
    else
        cout << getResponseStr << endl;
 
    // test post requery
    string postUrlStr = "https://www.baidu.com/s";
    string postParams = "f=8&rsv_bp=1&rsv_idx=1&word=picture&tn=98633779_hao_pg";
    string postResponseStr;
    auto res = curl_post_req(postUrlStr, postParams, postResponseStr);
    if (res != CURLE_OK)
        cerr << "curl_easy_perform() failed: " + string(curl_easy_strerror(res)) << endl;
    else
        cout << postResponseStr << endl;
 
    // global release
    curl_global_cleanup();
    system("pause");
    return 0;
}
 

 

 

 

 

get和post可以用于请求html信息,也可以请求xml和json等串
可以添加自定义的header 域和cookies
这是libcurl的简单接口,基本等同于阻塞试请求,libcurl有高阶的异步并发接口,运用更复杂

本文转载自:https://blog.csdn.net/u012234115/article/details/71371962 

粉丝 0
博文 15
码字总数 7822
作品 0
海淀
程序员
私信 提问
C/C++使用libcurl库发送http请求

C++要实现http网络连接,需要借助第三方库,libcurl使用起来还是很方便的 环境:win32 + vs2015 如果要在linux下使用,基本同理 1,下载编译libcurl 下载curl源码,找到vs工程,按照x86 x64...

u012234115
2017/05/07
0
0
UtilBox(ub)基础组件 -- EasyCurl 发送http请求(1)

昨天晚上锻炼身体,好久没激烈与动了,爽快!回到家,赶紧把之前写好的curl组件分享出来,EasyCurl其实就是对libcurl的一个封装,libcurl如果没用过的可以百度之。 curl其实很简单理解,soc...

长平狐
2013/01/05
297
0
用C++实现类似于JAVA HttpServlet 的编程接口

互联网刚兴起时,很多项目都是用 C /Perl 语言写的一大堆 CGI,一些老程序员可谓是偿尽了编程的苦,因为那时国内的技术水平普遍比较低,如果你会 CGI 编程,就已经算是行业中人了,如果你对 ...

郑树新
2014/08/23
302
0
PHP易用的http客户端:curlpp

curlpp是一个方便在php中发起http请求的C++扩展。基于libcurl开发。有别于已有的curl扩展。curlpp提供的接口更加简明,轻松发起GET/POST请求. curlpp的主要特点是告别麻烦的设置过程,直面业...

让PHP飞
2014/12/24
270
0
acl 网络通信服务器框架 3.1.0 版本发布

acl 3.1.0 版本发布了,acl 是 one advanced C/C++ library 的简称,主要包括网络通信库以及服务器框架库等功能,支持 Linux/Windows/Solaris/FreeBsd/MacOS 平台;整个 acl 项目主要包含三个...

郑树新
2015/02/08
3K
2

没有更多内容

加载失败,请刷新页面

加载更多

精华帖

第一章 jQuery简介 jQuery是一个JavaScript库 jQuery具备简洁的语法和跨平台的兼容性 简化了JavaScript的操作。 在页面中引入jQuery jQuery是一个JavaScript脚本库,不需要特别的安装,只需要...

流川偑
19分钟前
6
0
语音对话英语翻译在线翻译成中文哪个方法好用

想要进行将中文翻译成英文,或者将英文翻译成中文的操作,其实有一个非常简单的工具就能够帮助完成将语音进行翻译转换的软件。 在应用市场或者百度手机助手等各大应用渠道里面就能够找到一款...

401恶户
30分钟前
3
0
jenkins 插件下载加速最终方案

推荐做法 1、告诉jenkins 我哪些插件需要更新 jenkins插件清华大学镜像地址 https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json 1.进入jenkins系统管理 2.进入插件管...

vasks
36分钟前
4
0
composer爆错:zlib_decode():data error

解决办法:先用 composer diagnose 命令检测 然后 composer self-update 更新composer版本 最后执行 composer update 或者 composer install composer 切换阿里云镜像 用起来还快 composer c...

koothon
43分钟前
4
0
shangcheng-my

1.数据库主键、外键类型为bigint,那么在后台应该用什么类型的变量定义? 后台用string接收,因为前段传过来的一般都是json字符串,后台直接接收,mysql是可以吧数字类型的字符串转换为对应的...

榴莲黑芝麻糊
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部