美文网首页
Boost Beast 1.69.0随笔

Boost Beast 1.69.0随笔

作者: Larry_kof | 来源:发表于2019-08-03 14:57 被阅读0次

网络上出现频率最高的example的问题

  • 在1.69.0中没有以下的类型
  1. tcp_stream
  2. boost_front_handler

request和response body类型

  1. 首先request和response都属于message,message主要有header和body
    其中header主要就是http基本信息,如GET/POST 方法等

  2. message本身是个template,主要有一下几个类型

  • http::empty_body
    顾名思义就是没有body的message,一般用于不含有pay_load GET方法的request
    例子:
namespace http = boost::beast::http;
http::request<http::empty_body> req_;
req_.version(11);  // http1.1
req_.method(http::verb::get); // get method
req_.target("/"); // 一个URL host:port 后面的部分,如 http://127.0.0.1:80/abc/123 , 那么 target = /abc/123
req_.set(http::field::host, "127.0.0.1");
req_.set(http::field::user_agent,BOOST_BEAST_VERSION_STRING);
  • http::string_body
namespace http = boost::beast::http;
http::string_body::value_type body;
body = "some message";
http::response<http::string_body> res{http::status::not_found, 11};
res.set(http::field::server, BOOST_BEAST_VERSION_STRING);
res.set(http::field::content_type, "text/html");
res.body() = std::move(body);
res.prepare_payload();
  • http::file_body
namespace http = boost::beast::http;
http::file_body::value_type body;
beast::error_code ec;
body.open("path", beast::file_mode::scan, ec);
http::response<http::file_body> res{http::status::not_found, 11};
res.set(http::field::server, BOOST_BEAST_VERSION_STRING);
res.set(http::field::content_type, "text/html");
res.body() = std::move(body);
res.prepare_payload();
  • http::buffer_body
  • http::span_body<class T>
    看源码都是连续内存buffer的body

field

field主要是指http header中各种字段如content-type等
所有的field请参见beast源码中 include/boost/beast/http/field.hpp

  • 设置方法
http::request<http::string_body> req;
req.set(http::field::host, host);
req.set(http::field::user_agent, BOOST_BEAST_VERSION_STRING);
req.set(http::field::content_type, "text/html");
req.set(http::field::accept_encoding, "gzip, deflate");
  • 查找和获取
if (req.find(http::field::content_type) != req.end() )
{
  // find the field
  boost::string_view = req.at(http::field::content_type);
 // 或者使用[]操作符
}
  • 插入
req.insert(http::field::content_type, "text/html");
  • 删除
req.erase(http::field::content_type);
  • 清空所有
req.clear();

参考beast 1.70.0 中的chat-multi的修改(未加入websocket)

Github代码
请在listen.cpp的67行修改自己http的root文件夹目录

相关文章

  • Boost Beast 1.69.0随笔

    网络上出现频率最高的example的问题 在1.69.0中没有以下的类型 tcp_stream boost_fro...

  • Boost asio 1.69.0 随笔

    C++的网络通信 基于C++的网络库有不少比如muduo,libevent等。muduo是感觉写的最容易理解的,b...

  • 9月8日英语学习笔记

    黑猫阅读 Beauty And The Beast 生词: beast windy stable goods me...

  • 《英语陷阱大揭秘》合集14

    black beast 令人讨厌的人或物 【例句】He is considered a black beast. ...

  • Beast Butterfly

    Beast Butterfly

  • boost.python笔记

    boost.python笔记 标签:boost.python 简介 Boost.python是什么?它是boost...

  • 在 windows 下安装 Boost 1.62.0

    1. 获得Boost 进入Boost的网站(http://www.boost.org/) 下载boost_1_62...

  • Beast

    我想杀死自己 别听见火车发脾气 那只野兽也是 最好别听见它呼吸 怎么回事啊 今天,我分外喜欢粉色衬衣 和 她放在窗...

  • Beast

    我感到怪兽的存在, 他存在于我的身体里, 当我孤寂时, 便跳出来疯狂撕咬, 它盘踞在心脏上方, 像是鼎炉上盘桓的饕...

  • LevelDB在windows上编译

    下载Boost https://www.boost.org/users/download/ 编译Boost 打开w...

网友评论

      本文标题:Boost Beast 1.69.0随笔

      本文链接:https://www.haomeiwen.com/subject/htnxdctx.html