C++实现一个http服务器
一个简单的博客后端服务器
github地址,持续更新
设计参考
#define MYSQLPP_MYSQL_HEADERS_BURIED
#include "httplib.h"
#include "rapidjson/document.h"
#include <mysql++/mysql++.h>
#include <iostream>
#include <string>
using namespace std;namespace {const string blog_db = "blog_system";const string blog_table = "blog_table";// 下面是数据库服务器的信息,我用的腾讯 mysql 数据库,需配置你自己的服务器信息const string blog_server = "";const string blog_user = "";const string blog_pass = "";const int blog_port = ;
}int main() {using namespace httplib;using namespace mysqlpp;using namespace rapidjson;mysqlpp::Connection conn(false);conn.set_option(new mysqlpp::SetCharsetNameOption("utf8"));if (conn.connect(blog_db.c_str(), blog_server.c_str(), blog_user.c_str(),blog_pass.c_str(), blog_port)) {cout << "success" << endl;} else {exit(0);}Server svr;svr.Get("/", [](const Request& req, Response& res) {cout << "/" << endl;res.set_content("hello world!", "text/plain");});svr.Get("/hi", [](const Request& req, Response& res) {cout << "hi" << endl;res.set_content("Hi", "text/plain");});svr.Post("/hello", [](const Request& req, Response& res) {res.set_content("hello post", "text/plain");});svr.Post("/blog", [&](const Request& req, Response& res) {Document d;cout << req.method << endl;cout << req.path << endl;cout << req.remote_addr << endl;cout << req.body << endl;if (d.Parse(req.body.c_str()).HasParseError()) {cout << "parse" << endl;return 1;}auto title = d["title"].GetString();auto content = d["content"].GetString();auto tag_id = d["tag_id"].GetInt();auto create_time = d["create_time"].GetString();unique_ptr<char> sql(new char[strlen(content) * 2 + 4096]);sprintf(sql.get(), "insert into blog_table values(null, '%s', '%s', '%d', '%s')",title, content, tag_id, create_time);cout << sql.get() << endl;mysqlpp::Query query = conn.query(string(sql.get()));try {query.execute();} catch(const mysqlpp::BadQuery& er) {cout << "query error :" << er.what() << endl;return -1;}});svr.listen("localhost", 1234);
}
- CMakeLists.txt
cmake_minimum_required(VERSION 3.10)project (blog)set(CMAKE_CXX_STANDARD 11)include_directories(include)add_executable(service service.cpp)target_link_libraries(service pthread mysqlpp)
关注我的公众号
C++实现一个http服务器相关推荐
- 从零开始一个http服务器(五)-模拟cgi
从零开始一个http服务器-模拟cgi(五) 代码地址 : https://github.com/flamedancer/cserver git checkout step5 运行: make cle ...
- php树莓派养鱼,树莓派学习11: 将树莓派变成一个Web服务器
将树莓派变成一个Web服务器,通过访问网页,就可以控制树莓派,比如:查看摄像头\开灯等等. 一想到Linux Web服务器,我们首先想到的是,Apache + MySql + Php. 树莓派可以安装 ...
- js websocket同步等待_WebSocket硬核入门:200行代码,教你徒手撸一个WebSocket服务器...
本文原题"Node.js - 200 多行代码实现 Websocket 协议",为了提升内容品质,有较大修订. 1.引言 最近正在研究 WebSocket 相关的知识,想着如何能自 ...
- 一文读懂tomcat组件--一个web服务器的架构演化史
1. tomcat是谁? 2. tomcat可以做什么? tomcat是一个web容器,可以将web应用部署到tomcat,由它提供web服务,一个web容器中可以部署多个web应用,这些web应用可 ...
- 在Linux中搭建一个FTP服务器
在Linux中搭建一个ftp服务器,以供两个工作小组保管文件使用.禁用匿名.第一个小组使用ftp账号:ftp1,工作目录在:/var/ftp/ftp1:第二个小组使用ftp2,工作目录在:/var/f ...
- php开发ftp服务器搭建教程,在Linux中搭建一个FTP服务器
在Linux中搭建一个ftp服务器,以供两个工作小组保管文件使用.禁用匿名.第一个小组使用ftp账号:ftp1,工作目录在:/var/ftp/ftp1:第二个小组使用ftp2,工作目录在:/var/f ...
- gitblit如何迁移入gitlab合并迁移_github仓库迁移到gitlab以及gitlab仓库迁移到另一个gitlab服务器...
一. github仓库迁移到gitlab 先进入 new project: 选择 Import project, 选择下面的github: 进入后,这里需要github的 personal acces ...
- tftp c++ 上传_如何在 Fedora 上建立一个 TFTP 服务器
TFTP 即简单文本传输协议,允许用户通过 UDP 协议在系统之间传输文件. -- Curt Warfield(作者) TFTP 即 简单文本传输协议(Trivial File Transfer Pr ...
- Linux中搭建一个ftp服务器详解
来源:Linux社区 作者:luzhi1024 详解Linux中搭建一个ftp服务器. ftp工作是会启动两个通道: 控制通道 , 数据通道 在ftp协议中,控制连接均是由客户端发起的,而数据连接有 ...
- 在node.js中建立你的第一个HTTp服务器
这一章节我们将从初学者的角度介绍如何建立一个简单的node.js HTTP 服务器 创建myFirstHTTPServer.js //Lets require/import the HTTP modu ...
最新文章
- 问题:# mount –t ntfs /dev/sdb1 /mnt/ 解决办法
- Mybatis映射文件动态SQL语句-01
- Java如何校验中文乱码_java如何判断是否中文乱码
- Spring Cloud 第二天课堂笔记
- oracle的基本命令,Oracle基本命令
- windows服务开发(一、安装)
- OpenCV人工智能图像处理学习笔记 第4章 线段文字绘制
- 蒟蒻的代码规范与文档编写规范
- 数据库服务器sa 密码修改,修改vcenter数据库账号密码
- word表格怎么缩小上下间距_word文档中表格怎么缩小行间距
- SpringBatch 实列学习《一》
- 【酷毙了】野火新版fireTools多功能调试助手,有Windows和Linux版本,就问你喜不喜欢。...
- linux 域名解析 命令,Linux动态域名解析命令脚本
- python生成树状图_python 字典生成树状图
- SAP Local WebIDE Access denied
- vue-03-4:vue封装方法到工具类
- String metric
- 谷歌地球如何下载使用高程数据
- JAVA毕设项目家庭记账系统(java+VUE+Mybatis+Maven+Mysql)
- Python基础——流程控制之循环语句