C++使用libcurl发送HTTP协议

libcurl提供给开发者,用于使用C++跨平台的开发各种网络协议的请求及响应。本文将针对我所用到的简单方法举例说明libcurl的使用,希望能帮助到大家

libcurl简介

最近工作中要从外部接口中获取数据,我第一个想到的就是使用libcurl模拟客户端发送请求。libcurl主要功能就是用不同的协议连接和沟通不同的服务器。, libcurl当前支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传。

libcurl主要封装了curl的函数,大部分linux系统都会自动安装了curl命令。使用libcurl就如同使用curl命令一样,发送HTTP基本表单上传,代理,cookies, 和用户认证等。

安装方法可以使用源码下载编译安装。下载地址为:http://curl.haxx.se/download.html
关于libcurl的使用方法,这里不多做介绍。大家可以在官方文档中查看。

代码示例

下面在代码中详细说明libcurl的使用方法

#include <curl/curl.h>//这个一定要包含,是libcurl的库
#include <iostream>
#include <sstream>
using namespace std;

//回调函数,此处我不对数据进行处理,大家看情况自行更改
size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream)
{
    string data((const char*) ptr, (size_t) size * nmemb);
    *((stringstream*) stream) << data << endl;
    return size * nmemb;
}

int main()
{
    stringstream out;//curl下来的数据存在out中,方便对数据处理

    //初始化global,只能初始化一次
    CURLcode code = curl_global_init(CURL_GLOBAL_ALL);
    if (code != CURLE_OK)
    {
        cout << "curl_global_init error";
        return -1;
    }

    //初始化easy_curl对象,之后的操作都是对easy_curl对象做的
    CURL *curl = curl_easy_init();
    if (curl)
    {
        //模拟消息头,可以在头中发送get、post或者cookie
        struct curl_slist *headers = NULL;
        const char *tmp_str = "my_headers";
        headers = curl_slist_append(headers, tmp_str);

        //指定要访问的url
        char tmp_url[256] = { 0 };
        sprintf(tmp_url, "http://xxx.yyy.com/aaa?bbb=%s", get_data);
        curl_easy_setopt(curl, CURLOPT_URL, tmp_url);//对curl对象设置url
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);//对curl对象设置消息头

        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);//设置处理数据的回调函数
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &out);//这里我是讲curl下来的数据存入了out流中,方便对数据经行处理

        code = curl_easy_perform(curl);//发送HTTP协议访问url
        if (code != CURLE_OK)
        {
            cout << "curl_easy_perform error";
            curl_slist_free_all(headers);
            curl_easy_cleanup(curl);
            curl_global_cleanup();  
            return -2;
        }

        //clean up
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
        curl_global_cleanup();       
    }
    else
    {
        cout << "init easy_curl error";
        curl_global_cleanup();
        return -3;
    }

    cout << out.str() << endl;
    return 0;
}
最后进行编译的时候要 -lcurl 链接上curl库

[其他注意事项]:编译程序时可能会报libcurl版本信息的错误,此时只需

find / -name libcurl.so.4

找到报错的libcurl版本的文件,删掉/usr/local/lib/libcurl.so.4这个文件,将/usr/lib/x86_64-linux-gnu/libcurl.so.4这个文件链接过去即可:

ln -s /usr/lib/x86_64-linux-gnu/libcurl.so.4 /usr/local/lib/libcurl.so.4
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值