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 "";
}
相关推荐
那年窗外下的雪.9 小时前
第 02 天:Linux 权限、inode、目录项与链接
学习·http
那年窗外下的雪.10 小时前
AIDC 学习日志|第 27 天|EVPN 多归属收敛时间线与 Leaf2 接管验证
网络协议·学习·http·tcpdump
j7~10 小时前
【Linux】三十八.C++ 手写 HTTP 服务器:裸 socket + fork 多进程,从 HTTP 报文解析到浏览器打开网页
linux·网络·网络协议·学习·http·网络编程
天若有情67311 小时前
独立开发复盘:我用 Node.js 做了个在线工具箱
前端·json·工具
小则又沐风a11 小时前
深入理解TCP协议----滑动窗口,流量控制
linux·网络协议·tcp
captain3761 天前
网络原理(9)-数据链路层
java·网络协议·java-ee
Asurplus1 天前
【SpringBoot4】3、从SpringBoot4升级Sa-Token1.46.0报错
redis·sa-token·json·jackson·springboot4
代码中介商1 天前
C++ 预约系统实战(三):服务端实现——libevent 事件驱动与业务路由
c++·json·c/s
yi碗汤园1 天前
MQTT消息队列遥测传输协议
网络·网络协议·unity
花间相见1 天前
【后端开发|网络编程】—— 五种实时通信方案全解析:短轮询、长轮询、SSE、MQTT、WebSocket
后端·网络协议