当前位置: 首页 > news >正文

怎么做会员积分网站做的网站客户拿去维违法

怎么做会员积分网站,做的网站客户拿去维违法,徐州网站建设找哪家好,怎么做网站宣传boost beast http client boost http server boost beast 是一个非常好用的库#xff0c;带上boost的协程#xff0c;好很多东西是比较好用的#xff0c;以下程序使用四个线程开启协程处理进入http协议处理。协议支持http get 和 http post #include boost/beast/cor…boost beast http client boost http server boost beast 是一个非常好用的库带上boost的协程好很多东西是比较好用的以下程序使用四个线程开启协程处理进入http协议处理。协议支持http get 和 http post #include boost/beast/core.hpp #include boost/beast/http.hpp #include boost/beast/version.hpp #include boost/asio/ip/tcp.hpp #include boost/asio/spawn.hpp #include boost/config.hpp #include algorithm #include cstdlib #include iostream #include memory #include string #include thread #include vectornamespace beast boost::beast; // from boost/beast.hpp namespace http beast::http; // from boost/beast/http.hpp namespace net boost::asio; // from boost/asio.hpp using tcp boost::asio::ip::tcp; // from boost/asio/ip/tcp.hpp #undef BOOST_BEAST_VERSION_STRING #define BOOST_BEAST_VERSION_STRING qbversion1.1 // Return a reasonable mime type based on the extension of a file. beast::string_view mime_type(beast::string_view path) {using beast::iequals;auto const ext [path]{auto const pos path.rfind(.);if(pos beast::string_view::npos)return beast::string_view{};return path.substr(pos);}();if(iequals(ext, .htm)) return text/html;if(iequals(ext, .html)) return text/html;if(iequals(ext, .php)) return text/html;if(iequals(ext, .css)) return text/css;if(iequals(ext, .txt)) return text/plain;if(iequals(ext, .js)) return application/javascript;if(iequals(ext, .json)) return application/json;if(iequals(ext, .xml)) return application/xml;if(iequals(ext, .swf)) return application/x-shockwave-flash;if(iequals(ext, .flv)) return video/x-flv;if(iequals(ext, .png)) return image/png;if(iequals(ext, .jpe)) return image/jpeg;if(iequals(ext, .jpeg)) return image/jpeg;if(iequals(ext, .jpg)) return image/jpeg;if(iequals(ext, .gif)) return image/gif;if(iequals(ext, .bmp)) return image/bmp;if(iequals(ext, .ico)) return image/vnd.microsoft.icon;if(iequals(ext, .tiff)) return image/tiff;if(iequals(ext, .tif)) return image/tiff;if(iequals(ext, .svg)) return image/svgxml;if(iequals(ext, .svgz)) return image/svgxml;return application/text; }// Append an HTTP rel-path to a local filesystem path. // The returned path is normalized for the platform. std::string path_cat(beast::string_view base,beast::string_view path) {if(base.empty())return std::string(path);std::string result(base); #ifdef BOOST_MSVCchar constexpr path_separator \\;if(result.back() path_separator)result.resize(result.size() - 1);result.append(path.data(), path.size());for(auto c : result)if(c /)c path_separator; #elsechar constexpr path_separator /;if(result.back() path_separator)result.resize(result.size() - 1);result.append(path.data(), path.size()); #endifreturn result; }// This function produces an HTTP response for the given // request. The type of the response object depends on the // contents of the request, so the interface requires the // caller to pass a generic lambda for receiving the response. templateclass Body, class Allocator,class Send void handle_request(beast::string_view doc_root,http::requestBody, http::basic_fieldsAllocator req,Send send) {// Returns a bad request responseauto const bad_request [req](beast::string_view why){http::responsehttp::string_body res{http::status::bad_request, req.version()};res.set(http::field::server, BOOST_BEAST_VERSION_STRING);res.set(http::field::content_type, text/html);res.keep_alive(req.keep_alive());res.body() std::string(why);res.prepare_payload();return res;};// Returns a not found responseauto const not_found [req](beast::string_view target){http::responsehttp::string_body res{http::status::not_found, req.version()};res.set(http::field::server, BOOST_BEAST_VERSION_STRING);res.set(http::field::content_type, text/html);res.keep_alive(req.keep_alive());res.body() The resource std::string(target) was not found.;res.prepare_payload();return res;};// Returns a server error responseauto const server_error [req](beast::string_view what){http::responsehttp::string_body res{http::status::internal_server_error, req.version()};res.set(http::field::server, BOOST_BEAST_VERSION_STRING);res.set(http::field::content_type, text/html);res.keep_alive(req.keep_alive());res.body() An error occurred: std::string(what) ;res.prepare_payload();return res;};// Make sure we can handle the methodif (req.method() ! http::verb::get req.method() ! http::verb::head){if (req.method() http::verb::post){std::cout req.target() std::endl;/* string body req.body();std::cout the body is body std::endl;*/std::string lines req.body();std::cout lines std::endl;http::responsehttp::empty_body res{ http::status::ok, req.version() };res.set(http::field::server, BOOST_BEAST_VERSION_STRING);res.set(http::field::content_type, mime_type(./));res.content_length(0);res.keep_alive(req.keep_alive());return send(std::move(res));//return send(bad_request(Unknown HTTP-method));}else{std::cerr unknown http method\n;return send(bad_request(Unknown HTTP-method));}}// Request path must be absolute and not contain ...if( req.target().empty() ||req.target()[0] ! / ||req.target().find(..) ! beast::string_view::npos)return send(bad_request(Illegal request-target));// Build the path to the requested filestd::string path path_cat(doc_root, req.target());if(req.target().back() /)path.append(index.html);// Attempt to open the filebeast::error_code ec;http::file_body::value_type body;body.open(path.c_str(), beast::file_mode::scan, ec);// Handle the case where the file doesnt existif(ec beast::errc::no_such_file_or_directory)return send(not_found(req.target()));// Handle an unknown errorif(ec)return send(server_error(ec.message()));// Cache the size since we need it after the moveauto const size body.size();// Respond to HEAD requestif(req.method() http::verb::head){http::responsehttp::empty_body res{http::status::ok, req.version()};res.set(http::field::server, BOOST_BEAST_VERSION_STRING);res.set(http::field::content_type, mime_type(path));res.content_length(size);res.keep_alive(req.keep_alive());return send(std::move(res));}// Respond to GET requesthttp::responsehttp::file_body res{std::piecewise_construct,std::make_tuple(std::move(body)),std::make_tuple(http::status::ok, req.version())};res.set(http::field::server, BOOST_BEAST_VERSION_STRING);res.set(http::field::content_type, mime_type(path));res.content_length(size);res.keep_alive(req.keep_alive());return send(std::move(res)); }//------------------------------------------------------------------------------// Report a failure void fail(beast::error_code ec, char const* what) {std::cerr what : ec.message() \n; }// This is the C11 equivalent of a generic lambda. // The function object is used to send an HTTP message. struct send_lambda {beast::tcp_stream stream_;bool close_;beast::error_code ec_;net::yield_context yield_;send_lambda(beast::tcp_stream stream,bool close,beast::error_code ec,net::yield_context yield): stream_(stream), close_(close), ec_(ec), yield_(yield){}templatebool isRequest, class Body, class Fieldsvoidoperator()(http::messageisRequest, Body, Fields msg) const{// Determine if we should close the connection afterclose_ msg.need_eof();// We need the serializer here because the serializer requires// a non-const file_body, and the message oriented version of// http::write only works with const messages.http::serializerisRequest, Body, Fields sr{msg};http::async_write(stream_, sr, yield_[ec_]);} };// Handles an HTTP server connection void do_session(beast::tcp_stream stream,std::shared_ptrstd::string const const doc_root,net::yield_context yield) {bool close false;beast::error_code ec;// This buffer is required to persist across readsbeast::flat_buffer buffer;// This lambda is used to send messagessend_lambda lambda{stream, close, ec, yield};for(;;){// Set the timeout.stream.expires_after(std::chrono::seconds(30));// Read a requesthttp::requesthttp::string_body req;http::async_read(stream, buffer, req, yield[ec]);if(ec http::error::end_of_stream)break;if(ec)return fail(ec, read);// Send the responsehandle_request(*doc_root, std::move(req), lambda);if(ec)return fail(ec, write);if(close){// This means we should close the connection, usually because// the response indicated the Connection: close semantic.break;}}// Send a TCP shutdownstream.socket().shutdown(tcp::socket::shutdown_send, ec);// At this point the connection is closed gracefully }//------------------------------------------------------------------------------// Accepts incoming connections and launches the sessions void do_listen(net::io_context ioc,tcp::endpoint endpoint,std::shared_ptrstd::string const const doc_root,net::yield_context yield) {beast::error_code ec;// Open the acceptortcp::acceptor acceptor(ioc);acceptor.open(endpoint.protocol(), ec);if(ec)return fail(ec, open);// Allow address reuseacceptor.set_option(net::socket_base::reuse_address(true), ec);if(ec)return fail(ec, set_option);// Bind to the server addressacceptor.bind(endpoint, ec);if(ec)return fail(ec, bind);// Start listening for connectionsacceptor.listen(net::socket_base::max_listen_connections, ec);if(ec)return fail(ec, listen);for(;;){tcp::socket socket(ioc);acceptor.async_accept(socket, yield[ec]);if(ec)fail(ec, accept);elsenet::spawn(acceptor.get_executor(),std::bind(do_session,beast::tcp_stream(std::move(socket)),doc_root,std::placeholders::_1));} }int main(int argc, char* argv[]) {auto const address net::ip::make_address(0.0.0.0);auto const port static_castunsigned short(std::atoi(8080));auto const doc_root std::make_sharedstd::string(./);auto const threads std::maxint(1, std::atoi(4));// The io_context is required for all I/Onet::io_context ioc{threads};// Spawn a listening portnet::spawn(ioc,std::bind(do_listen,std::ref(ioc),tcp::endpoint{address, port},doc_root,std::placeholders::_1));// Run the I/O service on the requested number of threadsstd::vectorstd::thread v;v.reserve(threads - 1);for(auto i threads - 1; i 0; --i)v.emplace_back([ioc]{ioc.run();});ioc.run();return EXIT_SUCCESS; }python post 测试 post 客户端 import json import requests import time headers {Content-Type: application/json} data {projectname:four screen,picnum:8,memo:test } try:r requests.post(http://127.0.0.1:8080/test, jsondata, headersheaders)print(r.text) except requests.exceptions.ConnectionError:print(connectionError) time.sleep(1)get 用浏览器就行,写一个http index.html 测试页面 this is a test 浏览器打开8080 端口 下载文件 直接可以下载文件比如放入一个rar压缩文件也就是完成了一个http file server也是可以接收post 数据后面可以自行扩展 websocket 可以看我另外一个文章boost bease websocket协议
http://wiki.neutronadmin.com/news/272493/

相关文章:

  • 淮南品牌网站建设电话微小店网站建设平台
  • 程序员知识网站需要多少钱工人找工作哪个网站好
  • 织梦网站主页底怎样不让网站被收录
  • 厦门网站建设方案报价网站建设需要关注什么
  • 昌做网站厦门网站建设方案优化
  • 通辽做网站建设尚义网站建设
  • 品牌网站制作流程字体多的网站
  • 成都哪家做网站企业网站建设实训体会
  • 部门网站建设目的视频点播网站开发教程
  • 彩票网站是静态动态西安俄语网站建设
  • 苏州网站设计哪家公司好wordpress图片标签
  • 邢台网站建设信息西安建网站价格低
  • 帝国 网站搬家企业网站建设知识
  • 工业园区网站建设方案网站开发经理岗位职责
  • 手机网站与app的区别推荐个好看的网站
  • 哈尔滨百度网站建设做外贸推广的平台
  • 网站关键词排名下降受欢迎的郑州网站建设
  • 深南花园裙楼 网站建设宁波企业建网站报价
  • 官方网站建设方案合肥优化排名推广
  • 网站建设undefined网站建设所需基本资料
  • 做脚本从网站引流WordPress注册界面文字
  • 中国太空空间站鲲鹏建设集团有限公司网站
  • 如何建网站并做推广新会新闻官网
  • 建设银行宁夏分行网站网站建设无锡海之睿
  • 电影网站app怎么做的网站已经编辑好了 上线准备哪些工作
  • 建公司网站建设明细报价表仙踪林老狼网站欢迎您拍照
  • 网站原型图设计济南电子商务网站开发
  • 网站后台管理系统安装网页小游戏无需登录
  • 泗县口碑营销互联网营销推荐咨询seo建设网站
  • 融资计划书郑州网站seo