C++-Mongoose(3)-http-server-https-restful

1.url 结构

2.http和 http-restful区别在于对于mg_tls_opts的赋值

 

  2.1 http和https 区分


       a) port地址

static const char *s_http_addr = "http://0.0.0.0:8000";    // HTTP port

static const char *s_https_addr = "https://0.0.0.0:8443";  // HTTPS port
   

     b)https时 对mg_tls_opts赋值
 

 struct mg_tls_opts opts = {
#ifdef TLS_TWOWAY.ca = mg_str(s_tls_ca),
#endif.cert = mg_str(s_tls_cert),.key = mg_str(s_tls_key)};mg_tls_init(c, &opts);}

  3个重要变量:
static const char* s_tls_ca ;
static const char* s_tls_cert;
static const char* s_tls_key;

#ifdef TLS_TWOWAY
static const char* s_tls_ca =
"-----BEGIN CERTIFICATE-----\n"
"MIIBqjCCAU+gAwIBAgIUESoOPGqMhf9uarzblVFwzrQweMcwCgYIKoZIzj0EAwIw\n"
"RDELMAkGA1UEBhMCSUUxDzANBgNVBAcMBkR1YmxpbjEQMA4GA1UECgwHQ2VzYW50\n"
"YTESMBAGA1UEAwwJVGVzdCBSb290MCAXDTIwMDUwOTIxNTE0NFoYDzIwNTAwNTA5\n"
"MjE1MTQ0WjBEMQswCQYDVQQGEwJJRTEPMA0GA1UEBwwGRHVibGluMRAwDgYDVQQK\n"
"DAdDZXNhbnRhMRIwEAYDVQQDDAlUZXN0IFJvb3QwWTATBgcqhkjOPQIBBggqhkjO\n"
"PQMBBwNCAAQsq9ECZiSW1xI+CVBP8VDuUehVA166sR2YsnJ5J6gbMQ1dUCH/QvLa\n"
"dBdeU7JlQcH8hN5KEbmM9BnZxMor6ussox0wGzAMBgNVHRMEBTADAQH/MAsGA1Ud\n"
"DwQEAwIBrjAKBggqhkjOPQQDAgNJADBGAiEAnHFsAIwGQQyRL81B04dH6d86Iq0l\n"
"fL8OKzndegxOaB0CIQCPwSIwEGFdURDqCC0CY2dnMrUGY5ZXu3hHCojZGS7zvg==\n"
"-----END CERTIFICATE-----\n";
#endif
static const char* s_tls_cert =
"-----BEGIN CERTIFICATE-----\n"
"MIIBhzCCASygAwIBAgIUbnMoVd8TtWH1T09dANkK2LU6IUswCgYIKoZIzj0EAwIw\n"
"RDELMAkGA1UEBhMCSUUxDzANBgNVBAcMBkR1YmxpbjEQMA4GA1UECgwHQ2VzYW50\n"
"YTESMBAGA1UEAwwJVGVzdCBSb290MB4XDTIwMDUwOTIxNTE0OVoXDTMwMDUwOTIx\n"
"NTE0OVowETEPMA0GA1UEAwwGc2VydmVyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcD\n"
"QgAEkuBGnInDN6l06zVVQ1VcrOvH5FDu9MC6FwJc2e201P8hEpq0Q/SJS2nkbSuW\n"
"H/wBTTBaeXN2uhlBzMUWK790KKMvMC0wCQYDVR0TBAIwADALBgNVHQ8EBAMCA6gw\n"
"EwYDVR0lBAwwCgYIKwYBBQUHAwEwCgYIKoZIzj0EAwIDSQAwRgIhAPo6xx7LjCdZ\n"
"QY133XvLjAgVFrlucOZHONFVQuDXZsjwAiEAzHBNligA08c5U3SySYcnkhurGg50\n"
"BllCI0eYQ9ggp/o=\n"
"-----END CERTIFICATE-----\n";static const char* s_tls_key =
"-----BEGIN PRIVATE KEY-----\n"
"MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQglNni0t9Dg9icgG8w\n"
"kbfxWSS+TuNgbtNybIQXcm3NHpmhRANCAASS4EacicM3qXTrNVVDVVys68fkUO70\n"
"wLoXAlzZ7bTU/yESmrRD9IlLaeRtK5Yf/AFNMFp5c3a6GUHMxRYrv3Qo\n"
"-----END PRIVATE KEY-----\n";

   2.2code


   restfulserver_fn函数         

static void restfulserver_fn(struct mg_connection *c, int ev, void *ev_data, void *fn_data) 
{if (ev == MG_EV_ACCEPT && fn_data != NULL)  //1.如果收到消息 MG_EV_ACCEPT{struct mg_tls_opts opts =               //1.1.结构赋值{#ifdef TLS_TWOWAY.ca = mg_str(s_tls_ca),#endif.cert = mg_str(s_tls_cert),.key = mg_str(s_tls_key)};   mg_tls_init(c, &opts);                  //1.2放入上下文中}if (ev == MG_EV_HTTP_MSG)                    //2.如果收到消息 MG_EV_HTTP_MSG{struct mg_http_message *hm = (struct mg_http_message *) ev_data;//1.get请求 ,显示if (mg_http_match_uri(hm, "/api/stats"))   {// Print some statistics about currently established connectionsmg_printf(c, "HTTP/1.1 200 OK\r\nTransfer-Encoding: chunked\r\n\r\n");mg_http_printf_chunk(c, "ID PROTO TYPE      LOCAL           REMOTE\n");for (struct mg_connection *t = c->mgr->conns; t != NULL; t = t->next) {mg_http_printf_chunk(c, "%-3lu %4s %s %M %M\n", t->id,t->is_udp ? "UDP" : "TCP",t->is_listening  ? "LISTENING": t->is_accepted ? "ACCEPTED ": "CONNECTED",mg_print_ip, &t->loc, mg_print_ip, &t->rem);}mg_http_printf_chunk(c, "");  // Don't forget the last empty chunk} //2.post请求 回resultelse if (mg_http_match_uri(hm, "/api/f2/*"))  {mg_http_reply(c, 200, "", "{\"result\": \"%.*s\"}\n", (int) hm->uri.len,hm->uri.ptr);} //3.显示当前目录文件列表else                           {struct mg_http_serve_opts opts = {.root_dir = s_root_dir};mg_http_serve_dir(c, ev_data, &opts);}}(void) fn_data;
}


   main 函数

void main()
{struct mg_mgr mgr;                            // Event managermg_log_set(MG_LL_DEBUG);                      // Set log levelmg_mgr_init(&mgr);                            // Initialise event managermg_http_listen(&mgr, s_http_addr, restfulserver_fn, NULL);  // Create HTTP listenermg_http_listen(&mgr, s_https_addr, restfulserver_fn, (void*)1);  // HTTPS listenerfor (;;) mg_mgr_poll(&mgr, 1000);                    // Infinite event loopmg_mgr_free(&mgr);
}


 

2.3测试
 

 启动httpserver 程序
1.2.1  浏览器访问:http://127.0.0.1:8000:
         将显示exe程序根目录文件列表
1.2.2  浏览器访问: http://127.0.0.1:8000/api/stats:
         将显示:
        

         
1.2.3 使用postman: 发送post请求:
          http://127.0.0.1:8000/api/f2/*,
     

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

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

相关文章

Android笔记(六):JetPack Compose常见的UI组件

一、文本组件 1.1Text Column(modifier Modifier.fillMaxSize().background(Color.Green).padding(10.dp)){Text(text stringResource(id R.string.title_content),modifier Modifier.fillMaxWidth().border(BorderStroke(1.dp, Color.White)),fontSize 20.sp,textAlign …

分布式文件服务器——Windows环境MinIO的三种部署模式

上节简单聊到MinIO:分布式文件存储服务——初识MinIO-CSDN博客,但没具化,本节开始展开在Windows环境下 MinIO的三种部署模式:单机单节点、单机纠删码、集群模式。 部署的几种模式简要概括 所谓单机单节点模式:即MinI…

在Windows下自己从源码编译Python3.10.13成安装包

文章目录 (一)Python 3.10 的生命周期(一)下载源码(二)准备环境(三)编译(3.1)解压源码到目录(3.2)下载依赖(PCBuild&#…

消息称苹果或在明年推出搭载M3芯片的MacBook产品

近日据 DigiTimes 发布的博文,苹果公司计划在 2024 年推出搭载 M3 芯片的 MacBook 产品。然而,关于这款新产品的发布日期仍存在争议。虽然一些爆料认为苹果可能会在今年发布这款产品,但也有一些爆料认为发布时间会推迟到 2024 年。根据各项报…

02Maven核心程序的下载与settings.xml文件的配置,环境变量的配置

Maven核心程序的解压与配置 Maven的下载与解压 Maven官网下载安装包 将下载的Maven核心程序压缩包apache-maven-3.8.4-bin.zip解压到一个非中文且没有空格的目录 Maven的核心配置文件 在Maven的解压目录conf中我们需要配置Maven的核心配置文件settings.xml 配置本地仓库位置…

多机器人三角形编队的实现

文章目录 前言一、机器人编队前的准备二、配置仿真环境2.编写机器人编队.cpp文件 三、三角形编队测试 前言 前阵子一直想要实现多机器人编队,找到了很多开源的编队代码,经过好几天的思索,终于实现了在gazebo环境中的TB3三角形机器人编队。 一…

【数据分享】2022年我国30米分辨率的坡向数据(免费获取)

地形数据,也叫DEM数据,是我们在各项研究中最常使用的数据之一。之前我们分享过2022年哥白尼30米分辨率的DEM高程数据,该数据被公认为是全球最佳的开源DEM数据之一,甚至没有之一(可查看之前的文章获悉详情)&…

macbook电脑删除app怎么才能彻底清理?

macBook是苹果公司推出的一款笔记本电脑,它的操作系统是macOS。在macBook上安装的app可能会占用大量的存储空间,因此,当我们不再需要某个app时,需要将其彻底删除。macbook删除app,怎么才能彻底呢?本文将给大…

京东数据平台:2023年京东营养保健品市场销售数据分析

随着十一长假结束,市场端也开始了一系列的消费数据回顾和复盘。从现有数据表现来看,营养保健品市场的增长备受关注。 近日,京东消费及产业发展研究院与《经济日报》联合整合了相关数据。数据显示,2023年中秋福利采购季期间&#…

一文理清JVM结构

JVM结构介绍 JVM一共分为三个组成部分: 1 类加载子系统 主要是将class文件加载到内存中的一个系统,其核心组件是类加载器 2 运行时数据区子系统 1 JVM私有部分 1 虚拟机栈 描述的是Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧&…

微信小程序/vue3/uview-plus form兜底校验

效果图 代码 <template><u-form :model"form" ref"formRole" :rules"rules"><u-form-item prop"nickname"><u-input v-model"form.nickname" placeholder"姓名" border"none" /&…

京东数据平台:2023年服饰行业销售数据分析

最近看到有些消费机构分析&#xff0c;不少知名的运动品牌都把“主战场”放到了冲锋衣&#xff0c;那么羽绒服市场就比较危险了。但其实羽绒服市场也有机会点可寻。 先来说冲锋衣。的确&#xff0c;从今年的销售数据以及增长情况&#xff0c;冲锋衣的确会是今年冬天的大热门品…

大数据flink篇之三-flink运行环境安装(一)单机Standalone安装

一、安装包下载地址 https://archive.apache.org/dist/flink/flink-1.15.0/ 二、安装配置流程 前提基础&#xff1a;Centos环境&#xff08;建议7以上&#xff09; 安装命令&#xff1a; 解压&#xff1a;tar -zxvf flink-xxxx.tar.gz 修改配置conf/flink-conf.yaml&#xff1…

ubuntu中查看进程并结束进程以查看资源占用命令

ps命令&#xff1a;可以列出正在运行的进程。ps -e ps -aux 查看所有进程&#xff0c;每行一个程序&#xff08;常用&#xff09;ps -A 查看当前系统所有的进程。&#xff08;常用&#xff09;ps -A | grep chrome 命令去搜索某个指定进程。&#xff08;常用&#xff09;ps -A…

LiveMedia视频中间件如何与第三方系统实现事件录像关联

一、平台简介 LiveMedia视频中间件是支持部署到本地服务器或者云服务器的纯软件服务&#xff0c;也提供服务器、GPU一体机全包服务&#xff0c;提供视频设备管理、无插件、跨平台的实时视频、历史回放、语音对讲、设备控制等基础功能&#xff0c;支持视频协议有海康、大华私有协…

Tomcat的安装和配置

一.Tomcat下载&#xff1a;去Tomcat官网地址 在左侧Download中选择你需要下载的版本&#xff0c;这里我选择Tomcat9 根据电脑系统是32位还是64位选择&#xff0c;这里我选择64-bit Windows zip&#xff0c;点击即可下载 下载后直接解压&#xff0c;这里我解压在E盘的computer…

Python 简介

一、Python 简介 Python 是著名的“龟叔” Guido van Rossum 在 1989 年圣诞节期间&#xff0c;为了打发无聊的圣诞节而编写的一个编程语言。牛人就是牛人&#xff0c;为了打发无聊时间竟然写了一个这么牛皮的编程语言。 现在&#xff0c;全世界差不多有 600 多种编程语言&am…

性能测试之性能测试指标详解

前言 刚开始&#xff0c;以为做性能测试&#xff0c;就是做些脚本、参数化、关联&#xff0c;压起来之后&#xff0c;再扔出一个结果。 但实际上不止这些内容&#xff0c;还要加上性能分析&#xff0c;关注调优之后响应时间有多大的提升&#xff0c;TPS 有多大的提高&#xf…

K8S云计算系列-(3)

K8S Kubeadm案例实战 Kubeadm 是一个K8S部署工具&#xff0c;它提供了kubeadm init 以及 kubeadm join 这两个命令来快速创建kubernetes集群。 Kubeadm 通过执行必要的操作来启动和运行一个最小可用的集群。它故意被设计为只关心启动集群&#xff0c;而不是之前的节点准备工作…

GPT-4V的图片识别和分析能力

GPT-4V是OpenAI开发的大型语言模型&#xff0c;是GPT-4的升级版本。GPT-4V在以下几个方面进行了改进&#xff1a; 模型规模更大&#xff1a;GPT-4V的参数量达到了1.37T&#xff0c;是GPT-4的10倍。训练数据更丰富&#xff1a;GPT-4V的训练数据包括了1.56T的文本和代码数据。算…