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 "";
}
相关推荐
LK_0719 分钟前
【FastAPI】基础篇 01|开始之前:API、HTTP 与 FastAPI 到底是什么
网络协议·http·fastapi
阿星_24 分钟前
pydio登陆不了分析问题
网络协议·http·https
Joy T1 小时前
Gzip 压缩原理与实践:HTTP 响应压缩、性能收益与工程配置
网络·网络协议·http
博客zhu虎康2 天前
实现局域网P2P通信:内网发送消息
网络·网络协议·p2p
Hello_Pyhx2 天前
NWinfo 导出 Windows 硬件信息:从 JSON 报告到缺项排查
windows·json
xixingzhe23 天前
AI 对话打字机效果:SSE 和 HTTP 的区别与适用场景
网络·网络协议·http
叼烟扛炮3 天前
Linux 学习笔记(五十一):数据链路层与 ARP 协议——局域网寻址与黑客骗局
linux·网络·网络协议·php·tcpdump
程序员大阳3 天前
副队长JavaScript教程(66)-本地存储实战:待办事项网页的开发
javascript·json·实战·待办事项·本地存储·案例
沫璃染墨3 天前
从零入门计算机网络系列(十四):TCP报文与字节流本质——从数据封装到报文边界
linux·服务器·网络·网络协议·tcp/ip·tcp
byte轻骑兵3 天前
【LMP】规范精讲[13]: 参数的户口本、公钥的集装箱与出厂的兜底值
人工智能·网络协议·人机交互·lmp·蓝牙链路管理