gpt4 book ai didi

c++ - 在 C++ 中解析 HTTP header

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:28:41 26 4
gpt4 key购买 nike

我正在使用 curl 与服务器通信。

当我发出数据请求时,我收到 HTTP header ,后跟由边界分隔的 jpeg 数据,如下所示:

enter image description here

我需要解析

  1. 边界字符串
  2. 内容长度。

我已将传入数据复制到一个字符数组中,如下所示:

static size_t OnReceiveData ( void * pvData, size_t tSize, size_t tCount, void * pvUser )
{
printf("%*.*s", tSize * tCount, tSize * tCount, pvData);

char* _data;
if(pvData != nullptr && 0 != tCount)
{
_data = new char[tCount];
memcpy(_data, pvData, tCount);
}

return ( tCount );
}

我怎样才能在 C++ 中最好地做到这一点?我如何实际检查和解析 _data 数组以获得我想要的信息?例如,我可以使用任何 boost 库吗??

最佳答案

您可以即时解析 header 或将它们放入 map 中并稍后进行后处理。使用 std::string 中的 findsubstr 方法.看Boost String Algorithms Library ,它包含很多算法,例如修剪

例如将 header 放入 std::map 并打印它们(粗剪):

#include <stdlib.h>
#include <iostream>
#include <sstream>
#include <string>
#include <map>
#include <boost/algorithm/string.hpp>

int main(int argc, char* argv[]) {
const char* s = "HTTP/1.1 200 OK\r\n"
"Content-Type: image/jpeg; charset=utf-8\r\n"
"Content-Length: 19912\r\n\r\n";

std::map<std::string, std::string> m;

std::istringstream resp(s);
std::string header;
std::string::size_type index;
while (std::getline(resp, header) && header != "\r") {
index = header.find(':', 0);
if(index != std::string::npos) {
m.insert(std::make_pair(
boost::algorithm::trim_copy(header.substr(0, index)),
boost::algorithm::trim_copy(header.substr(index + 1))
));
}
}

for(auto& kv: m) {
std::cout << "KEY: `" << kv.first << "`, VALUE: `" << kv.second << '`' << std::endl;
}

return EXIT_SUCCESS;
}

你会得到输出:

KEY: `Content-Length`, VALUE: `19912`
KEY: `Content-Type`, VALUE: `image/jpeg; charset=utf-8`

有了 header ,您就可以提取所需的 header 进行后期处理。

关于c++ - 在 C++ 中解析 HTTP header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25896916/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com