原来C++调用HTTP API接口也能这么优雅

原来C++调用HTTP API接口也能这么优雅

动机

​ 在开发C++程序时,难免会遇到与其他语言/系统对接的情况。百度谷歌搜了一下,发现star最高的cpp-httplib。试了一下,真香!关键这个库还是header only 引用的,这个超级Nice!!从此以后再也不担心跨语言对接了(手动滑稽)。 本文仅作抛砖引玉~

一:cpp-httplib简介

一个header-only且跨平台的C++ HTTP/HTTPS库

只需将***httplib.h***包含到你的工程中即可完成配置(header-only)

注意:此库在多线程下会阻塞运行,暂不支持非阻塞运行

跨平台!!! 这个很重要,我经常在Windows和Linux来回换着编程

​ 此库既支持用C++编写客户端访问HTTP服务器, 也支持用于编写C++服务端。由于本人实际工作用很少用C++编写服务端,所以就不在这里介(误)绍(导)了。

二:主要用法

  1. 工程引用

    //只需包含头文件即可
    #include "path/to/httplib.h"
    
  2. 发送POST请求

    1. 先介绍几个重要的构造函数

      //无参调用POST接口
      httplib::Result Client::Post(const char *path);
      
      //带参数调用POST接口, 参数一般是Json形式的
      httplib::Result Client::Post(const char *path, const Params &params);	
      
      //带Header、参数调用POST接口
      httplib::Result Client::Post(const char *path, const Headers &headers,const Params &params);
      
      //不带Header、表单参数调用POST接口
      httplib::Result Client::Post(const char *path, const MultipartFormDataItems &items);
      
      //带Header、表单参数调用Post参数
      httplib::Result Client::Post(const char *path, const Headers &headers, const MultipartFormDataItems &items);  
      
    2. 调用格式

      #include <httplib.h>
      #include <iostream>
      
      int main(void)
      {
          httplib::Client cli("localhost", 1234);
          
        	httplib::Params params;
          params.emplace("name", "john");
          params.emplace("note", "coder");
          
          if (auto res = cli.Post("/post", params);) 
          {
              if (res->status == 200) 
              {
                std::cout << res->body << std::endl;
                //返回的结果可使用json对象建模,推荐看上一篇文章  
              
              }
          } 
          else 
          {
              auto err = res.error();
              ...
          }
      }
      
      
    3. 上面给出了带参数访问Post接口的示例,读者可根据自己需求改动~

  3. 发送Get请求

    1. 几个重要的构造函数

      //无参调用Get接口
      httplib::Result Client::Get(const char *path);
      
      //带Header调用Get接口
      httplib:: Result Client::Get(const char *path, const Headers &headers);
      
      //使用ContentReceiver接受数据
      std::string body;
      auto res = cli.Get("/large-data",
        [&](const char *data, size_t data_length) {
          body.append(data, data_length);
          return true;
        });
      
    2. 调用格式参考Post

  4. 其他的HTTP方法

    //PUT
    res = cli.Put("/resource/foo", "text", "text/plain");
    
    //DELETE
    res = cli.Delete("/resource/foo");
    

三:注意事项

  1. 此库支持g++4.8及下不受支持

  2. 在Windows下,如果要包含windows.h, 则应httplib.h包含在Windows.h之前; 否则就要添加相关的宏定义

    //注意:WIN8及更老的系统不支持。话说现在新开发的程序基本都在WIN10了吧。。。。。
    
    #include <httplib.h>
    #include <Windows.h>
    
    
    //或者
    #define WIN32_LEAN_AND_MEAN
    #include <Windows.h>
    #include <httplib.h>
    

欢迎大家点赞评论加转发, 各位同学的点赞评论加转发是我持续写作输出的动力,不知之处也欢迎大家批评指正

感兴趣的小伙伴可以关注一下我个人的微信公众号 兰亭汇,这个公众号主要用于分享个人成长经历~~公众号二维码

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_40603938

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值