Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 访问cpp netlib http服务器中的请求头_C++_Boost_Cpp Netlib - Fatal编程技术网

C++ 访问cpp netlib http服务器中的请求头

C++ 访问cpp netlib http服务器中的请求头,c++,boost,cpp-netlib,C++,Boost,Cpp Netlib,我已经开始使用cpp netlib(稳定版0.10.1)开发HTTP服务器,从可用的文档中,我不确定如何访问服务器处理程序中的HTTP请求头。我知道可以使用如下包装器完成: void operator()(async_server::request const &Request, async_server::connection_ptr pConnection) { http::impl::request_headers_wrapper<http::tags::http_a

我已经开始使用
cpp netlib
(稳定版0.10.1)开发HTTP服务器,从可用的文档中,我不确定如何访问服务器处理程序中的HTTP请求头。我知道可以使用如下包装器完成:

void operator()(async_server::request const &Request, async_server::connection_ptr pConnection)
{
    http::impl::request_headers_wrapper<http::tags::http_async_server> Headers = headers(Request);
}
那么,有人能指出为什么会有这样的重新定义吗?或者我是否缺少某种方法来实际获取
多重映射
,或者带有
向量
的包装器是使用
cpp netlib
中的标题的“转到”方式?至少在我看来,
multimap
更容易使用

更新


我还快速查看了POCO库,但无法理解它们的身份验证类是否仅用于客户端会话或服务器?如果有人能给出一个提示,也许我仍然可以切换到POCO,如果这能让生活更轻松。

您所指的特性适用于客户端请求中的头,用于cpp netlib中的客户端实现。为了使从服务器中的请求获取头与从客户端请求/响应对象获取请求相同,正在进行一些工作(未完成)

服务器端的头是成对向量的原因是为了空间和时间方面的“效率”。如果您可以支付在服务器处理程序上创建多重映射的费用,那么您可能应该这样做。以高效的方式高效地处理请求中的头的通常模式是始终对要查找的头进行线性扫描,并在它们进入时进行处理。类似于此:

string content_type, content_length;
for (const auto& header : request.headers) {
  if (header.name == "Content-Type") content_type = header.value;
  if (header.name == "Content-Length") content_length = header.value;
  if (!content_type.empty() && !content_length.empty()) break;
}
如果您的应用程序需要这种级别的头处理,您可以使用某种模式(可能是
std::map
)来概括这一点

不过,一般来说,遍历向量列表不会花费太多时间。如果头的数量很大(O(10000)),那么您还有其他问题。这里的折衷是内存局部性(向量具有连续元素,而映射的元素通常随机分配在内存的不同部分)和高效查找(只有在达到一定大小后,对数时间才有意义)之间的折衷


我完全接受便利性受到一些影响的观点。也许一个不同的数据结构在这里会有所帮助(也许是一个
boost::flat_map
。但是一个界面改进是使与客户端请求/响应一起工作的代码也能与服务器请求/响应对象一起工作。

我已经忘记了这个问题,但是,是的,循环遍历标题并检查所需的名称是我的做法。
string content_type, content_length;
for (const auto& header : request.headers) {
  if (header.name == "Content-Type") content_type = header.value;
  if (header.name == "Content-Length") content_length = header.value;
  if (!content_type.empty() && !content_length.empty()) break;
}