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 "";
}
相关推荐
电商API&Tina1 小时前
1688 拍立淘接口(item_search_img)测试与接入实战心得
java·大数据·前端·物联网·oracle·json
Hello_Embed2 小时前
嵌入式上位机开发入门(二十二):RTU/TCP 双协议互斥访问寄存器
笔记·网络协议·tcp/ip·嵌入式
Java成神之路-5 小时前
深度解析TCP连接管理:三次握手、四次挥手与保活机制
网络·网络协议·tcp/ip
绿豆人5 小时前
RPC项目学习2
网络协议·学习·rpc
ZC跨境爬虫5 小时前
海南大学交友平台开发实战 day11(实现性别图标渲染与后端数据关联+Debug复盘)
前端·python·sqlite·html·json
帐篷Li6 小时前
创建Controller HTTP测试脚本
网络·网络协议·http
捞的不谈~6 小时前
LUCID相机(HTR003S-001)更改IP地址
网络·网络协议·tcp/ip
本地化文档6 小时前
requests-docs-l10n
python·http·github·gitcode
被放养的研究生7 小时前
vscode-settings.json
ide·vscode·json
傻啦嘿哟8 小时前
住宅IP隧道代理vs数据中心隧道代理:谁更值得买
网络·网络协议·tcp/ip