HTTP + JSON 接口调用清单总结

cpp-httplib 库接口

cpp 复制代码
//客户端创建
httplib::Client::Client(const std::string& host)
void httplib::Client::set_connection_timeout(long sec, long usec)
void httplib::Client::set_read_timeout(long sec, long usec)
cpp 复制代码
//请求头
httplib::Headers::Headers()
cpp 复制代码
//POST 请求(核心)
httplib::Result httplib::Client::Post(
    const std::string& path,
    const httplib::Headers& headers,
    const std::string& body,
    const std::string& content_type
)
cpp 复制代码
//Result
// 1. 判断请求是否成功(Result 隐式转换)
httplib::Result::operator bool() const

// 2. 获取响应状态码 → **来自 Result 指向的 Response**
int httplib::Result::operator->()->status

// 3. 获取响应体字符串 → **来自 Result 指向的 Response**
std::string httplib::Result::operator->()->body

JsonCpp 库接口

cpp 复制代码
// 请求构建
Json::Value::Value()
Json::Value::Value(Json::arrayValue)
Json::Value& Json::Value::operator[](const char* key)
void Json::Value::append(const Json::Value& value)//数组 []

// 序列化
Json::StringWriterBuilder::StringWriterBuilder()
Json::Value& Json::StringWriterBuilder::operator[](const char* key)
std::string Json::writeString(Json::StreamWriterBuilder&, const Json::Value&)
// 反序列
Json::CharReaderBuilder::CharReaderBuilder()
bool Json::parseFromStream(Json::CharReaderBuilder&, std::istream&, Json::Value*, std::string*)
// 响应判断 、取值
bool Json::Value::isMember(const char*) const
bool Json::Value::isArray() const
bool Json::Value::empty() const
bool Json::Value::isObject() const
bool Json::Value::isString() const
std::string Json::Value::asString() const

📌 示例场景3

cpp 复制代码
POST https://example.com/api/chat

请求:

XML 复制代码
{
  "model": "test-model",
  "messages": [
    {
      "role": "user",
      "content": "你好"
    }
  ]
}

响应:

XML 复制代码
{
  "id": "chat123",
  "choices": [
    {
      "message": {
        "role": "assistant",
        "content": "你好!有什么可以帮你?"
      }
    }
  ]
}

要求完成接口:

cpp 复制代码
std::string chat(const std::string& userInput);// userInput就是用户发给模型的一句话

参考代码:

cpp 复制代码
std::string chat(const std::string& userInput)
{
    //一、发送请求
        //op1:创建客户端
      httplib::Client client("https://example.com");
      client.set_connection_timeout(10,0);
      client.set_read_timeout(60,0);
        //op2:构建请求
      httplib::Headers headers = {
      {"Content-Type","application/json"}
      };
      Json::Value requestBody;
      requestBody["model"] = "test-model";
      Json::Value messagesArray(Json::arrayValue);
      Json::Value message;
      message["role"]= "user";
      message["content"] = userInput;
      messagesArray.append(message);
      requestBody["messages"] = messagesArray;
      
      Json::StringWriterBuilder swb;
      swb["indentation"] = "";
      auto body = Json::writeString(swb,requestBody);
        //op3:发送请求
      auto result = client.Post("/api/chat",headers,body,"application/json");
      if(!result)
      {
          bear::ERROR("chat send POST FAILED or dont recv response ERROR");
          return "";
      }
    //二、接收响应
        //op1:判断响应码
       bear::INFO("chat send POST success ,response status:{}",result->status);
       bear::INFO("chat send POST success ,response body:{}",result->body);
       if(result->status != 200)
       {
           return "";
       }
        //op2:反序列化
        Json::Value responseBody;
        std::string errResponse;
        Json::CharReaderBuilder crb;
        std::istringstream datSrc(result->body);
        auto ret = Json::parseFromStream(crb,datSrc,&responseBody,&errResponse);
        if(ret == false)
        {
            bear::ERROR("chat recv response but parseFromStream FAILED:{}",errResponse.c_str());
            return "";
        }
        //op3:解析响应
        if(responseBody.isMember("choices") && responseBody["choices"].isArray() && !responseBody["choices"].empty())
        {
            auto choices = responseBody["choices"][0];
            if(choices.isMember("message") && choices["message"].isObject())
            {
                if(choices["message"].isMember("content")&& choices["message"]["content"].isString())
                {
                    std::string replyString = choices["message"]["content"].asString();
                    return replyString; 
                }
            }
        }
        bear::ERROR("chat recv response but content not found");
        return "";
}
相关推荐
huashengzsj2 小时前
企业OV泛域名证书价格多少?2026年市场报价与选购指南
网络协议·http·https
qq_401700412 小时前
TCP 粘包问题深度解析:嵌入式网络开发的常见坑与解决方案
服务器·网络·qt·网络协议·tcp/ip
IT小白杨2 小时前
2026游戏工作室环境隔离指南:从设备指纹到移动IP的部署实践
前端·经验分享·网络协议·tcp/ip·游戏·安全架构·指纹浏览器
GitLqr2 小时前
从 TCP 底层看实时通信:为什么 SSE 往往比 WebSocket 更香?
websocket·http·openai
2401_868534782 小时前
运维工程师大厂 Nginx 面试题(二)
linux·网络协议
XUEYUAN52123 小时前
代理日志分析与监控:代理池健康状态巡检与分级告警体系搭建(运维实战)
运维·网络·网络协议·tcp/ip·算法·架构
酒神dnspup4 小时前
服务器端口检测怎么做?用 DNSPup 核对开放端口、监听服务与暴露风险
网络·网络协议·http·ssl证书·http状态码·服务器端口
酒神dnspup4 小时前
HTTP状态码检测怎么做?用 DNSPup 排查 4xx、5xx、重定向与网站可用性
网络·网络协议·http·http状态码
见山是山-见水是水5 小时前
网络请求性能优化落地指南:让原生界面在模拟器里稳定运行
网络协议·华为·性能优化·harmonyos
IPdodo_5 小时前
2026年SD-WAN 与跨境专线组合组网:3 种架构、智能选路与 SLA 验收
网络协议·sd-wan·网络架构·网络运维·企业网络·跨境网络