RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1377188
Accepted
Юрій Писанка
Юрій Писанка
Asked:2022-07-02 04:26:24 +0000 UTC2022-07-02 04:26:24 +0000 UTC 2022-07-02 04:26:24 +0000 UTC

cpp-httplib 请求和动态响应上的 HTTP 服务器

  • 772

以前,我问过一个问题,关于在 C++ 程序中使用哪个库来 创建Web 界面,实际上是 C++ 中的http 服务器,HolyBlackCat,是根据cpp-httplib椭圆形的建议。 我真的很喜欢这个库,因为它只包含一个 *.h 文件,这将安装简化到了不可能的地步。和简单。

下面是一个最简单的启动服务器的例子

  //
//  hello.cc
//
//  Copyright (c) 2019 Yuji Hirose. All rights reserved.
//  MIT License
//

#include <httplib.h>
using namespace httplib;

int main(void) {
  Server svr;

  svr.Get("/hi", [](const Request & /*req*/, Response &res) { //Про запросу к адресу 192.168.0.102:8080/hi Вернуть текст как страницу
    res.set_content("Hello World!", "text/plain"); //Текст для возврата и формат
  });
  
    svr.Get("/", [](const Request & /*req*/, Response &res) { //Про запросу к адресу 192.168.0.102:8080/ Вернуть текст как страницу
    res.set_content("Main Pages!", "text/plain"); //Текст для возврата и формат
  });

  //Команда запускает цикл так что в реальных проектах в отдельный процесс её
  svr.listen("192.168.0.102", 8080); // 192.168.0.102:8080 Ип куда розшарить, Ип вашого пк ну и порт какой то главное чтобы не был занят всякими торрентами иле open server
  
  //Проверок не делаем , по этому если программа просто завершала роботу то нужно использовать правильный ип
  //список можно получить командой в консоли ipconfig берем ип lan иле wlan
  }

但是如何处理请求?,例如,在套接字中,我们指示将它们发送到何处的函数,并且在函数本身中,我们已经解析了 url,并且根据请求,我们形成页面并将其返回给用户,一切都很清楚,但没有解决了冻结问题,所以我开始寻找替代方案。在 httplib 中,我在任何示例中都没有看到任何熟悉的内容。

如何在httplib库中接收请求,对其 进行处理并用新数据向发送者返回响应?

通过处理的话,我的意思是在 php $_GET 中接收一个数组。查看客户端使用 get 请求从服务器请求什么,无论是变量还是文件的值,我们都会返回它。当然,我会自己编写处理程序,但是如何创建它并动态返回页面。如果 svr.Get 或类似物不采用文本,而是采用处理函数,这将更合乎逻辑。其中,当被请求时,它将向哪个客户端页面发送请求类型的 Get Post 请求和一个数组,键值。

c++
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    KoVadim
    2022-07-01T16:05:56Z2022-07-01T16:05:56Z

    我查看了代码内部,似乎没有使用多线程,所以对于计数器,我将使用一个简单的int. 如果有的话,您可以随时将其转换为原子或用互斥体覆盖它(尽管在这里,一如既往,您需要小心)。

    首先,让我们创建一个全局计数器变量

    int counter = 0;
    

    (是的,全局变量不是很好,但对于我们的例子来说它会做的。在一般情况下会有某种单例或更好的)。并添加此处理程序

    svr.Get("/counter", [](const httplib::Request& req, httplib::Response& res) {
      counter++;
      res.set_content("counter = " + std::to_string(counter), "text/plain");
    });
    

    一切准备就绪。现在你可以在浏览器中访问http://127.0.0.1:8080/counter看到计数器,它在不断增加。好了,上半场结束了。

    让我们继续下半场

    如何在控制台中简单地显示客户端发送了一个请求,以及一个参数列表

    我们将向用户展示他自己的get请求参数!

    svr.Get("/show", [](const httplib::Request& req, httplib::Response& res) {
      //std::cout << "aaa, пользователь нам прислал запрос\n";
      std::string s;
      for (auto p : req.params) {
        s+= p.first + ":" + p.second + "\n";
      }
      res.set_content(s, "text/plain");
    });
    

    这里的一切都很简单明了——在循环中,我们遍历参数并将它们添加到行中,然后将其全部打印给用户。现在如果你写类似http://127.0.0.1:8080/show?data=test&q=1

    然后用户会看到这个

    data:test
    q:1
    
    • 2

相关问题

  • 编译器和模板处理

  • 指针。找到最小数量

  • C++,关于枚举类对象初始化的问题

  • 函数中的二维数组

  • 无法使用默认构造函数创建类对象

  • C++ 和循环依赖

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5