c++使用http请求-drogon框架

1 篇文章 0 订阅
  1. 创建drogon框架
    drogon_ctl create project test_ctrl
  1. 添加一个控制器
  • 进入controllers目录下
    drogon_ctl create controller -h check_ctrl
  1. 编写主函数

#include <drogon/drogon.h>
int main() {
    //Set HTTP listener address and port
    //drogon::app().addListener("0.0.0.0",80);
    //Load config file

#ifdef NDEBUG
    drogon::app().loadConfigFile("./config.json");
#else
    drogon::app().loadConfigFile("../../../config.json");
#endif
    drogon::app().run();
    return 0;
}

配置文件初步介绍,进需要做如何配置
// 这一部分是http监听的端口和ip地址
  "listeners": [
    {
      //address: Ip address,0.0.0.0 by default
      "address": "0.0.0.0",
      //port: Port number
      "port": 8080,
      //https: If true, use https for security,false by default
      "https": false
    }
    // ,
    // {
    //   "address": "0.0.0.0",
    //   "port": 443,
    //   "https": true,
    //   //cert,key: Cert file path and key file path, empty by default,0.0.1
    //   //if empty, use the global setting
    //   "cert": "",
    //   "key": "",
    //   //use_old_tls: enable the TLS1.0/1.1, false by default
    //   "use_old_tls": false,
    //   "ssl_conf": [
    //     //["MinProtocol", "TLSv1.3"]
    //   ]
    // }
  ],
//------------------
// 这一部分是在程序中的配置文件部分需要使用app().getCustomConfig(),由getCustomConfig得到的变量直接["path"]就可以不需要["custom_config"]["path"]
  //custom_config: custom configuration for users. This object can be get by the app().getCustomConfig() method.
  "custom_config": {
    "path": "D:/aaaa/bbb/",
    "time": 8,  // 小时:文件名+~小时得到文件的生成时间
  }
  1. 控制器.h文件
#include <drogon/HttpController.h>
#include <drogon/drogon.h>

using namespace drogon;
using namespace std;

class check_ctrl : public drogon::HttpController<check_ctrl>
{
  public:
    METHOD_LIST_BEGIN
   	 METHOD_ADD(check_ctrl::test, "/test?", Post, Get);
    METHOD_LIST_END
  
   void test(const HttpRequestPtr& req, std::function<void(const HttpResponsePtr&)>&& callback);
};
  1. 控制器.cpp文件
void check_ctrl::test(const HttpRequestPtr& req, std::function<void(const HttpResponsePtr&)>&& callback)
{

    Json::Value ret;
    // 获取配置文件参数
    auto config = app().getCustomConfig();
    if (config.empty())
    {
        ret["success"] = false;
        ret["error_msg"] = "Empty custom config!";
        callback(HttpResponse::newHttpJsonResponse(ret));
        return;
    }
    // 读取配置文件参数
    std::string bz2_file = config["path"].asString();   // 文件地址
    int diff_time = config["time"].asInt();      // 文件时间需要小时 
		
		// ........
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Drogon是一个基于C++14/17的Http应用框架使用Drogon可以方便的使用C++构建各种类型的Web应用服务端程序。 本版本库是github上Drogon工程的镜像库。Drogon是作者非常喜欢的美剧《权力的游戏》中的一条龙的名字(汉译作卓耿),和龙有关但并不是dragon的误写,为了不至于引起不必要的误会这里说明一下。 Drogon是一个跨平台框架,它支持Linux,也支持macOS、FreeBSD,和Windows。它的主要特点如下: 1、网络层使用基于epoll(macOS/FreeBSD下是kqueue)的非阻塞IO框架,提供高并发、高性能的网络IO。详细请见TFB Tests Results; 2、全异步编程模式; 3、支持Http1.0/1.1(server端和client端); 4、基于template实现了简单的反射机制,使主程序框架、控制器(controller)和视图(view)完全解耦; 5、支持cookies和内建的session; 6、支持后端渲染,把控制器生成的数据交给视图生成Html页面,视图由CSP模板文件描述,通过CSP标签把C++代码嵌入到Html页面,由drogon的命令行工具在编译阶段自动生成C++代码并编译; 7、支持运行期的视图页面动态加载(动态编译和加载so文件); 8、非常方便灵活的路径(path)到控制器处理函数(handler)的映射方案; 9、支持过滤器(filter)链,方便在控制器之前执行统一的逻辑(如登录验证、Http Method约束验证等); 10、支持https(基于OpenSSL实现); 11、支持websocket(server端和client端); 12、支持Json格式请求和应答, 对Restful API应用开发非常友好; 13、支持文件下载和上传,支持sendfile系统调用; 14、支持gzip/brotli压缩传输; 15、支持pipelining; 16、提供一个轻量的命令行工具drogon_ctl,帮助简化各种类的创建和视图代码的生成过程; 17、基于非阻塞IO实现的异步数据库读写,目前支持PostgreSQL和MySQL(MariaDB)数据库; 18、基于线程池实现sqlite3数据库的异步读写,提供与上文数据库相同的接口; 19、支持ARM架构; 20、方便的轻量级ORM实现,支持常规的对象到数据库的双向映射操作; 21、支持插件,可通过配置文件在加载期动态拆装; 22、支持内建插入点的AOP

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值