Rust 使用 reqwest 发送 POST 请求并解析 JSON 响应数据
async fn send_post() -> Result<String, reqwest::Error> {
    let client = reqwest::Client::new();
    //post 请求头
    let mut header = HeaderMap::new();
    header.insert("User-Agent",
                  "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \
                  Chrome/110.0.0.0 Safari/537.36".parse().expect("unsolve the userAgent header value."),
    );
    header.insert("referer", "https//www.covery.com".parse().expect("unsolve the referer value."));
    header.insert("sec-ch-ua", "sec-ch-ua".parse().expect("ms"));
    // post 请求体
    let mut data = HashMap::new();
    data.insert("prompt", "hello");
    let response = client.post("https://free-api.cveoy.com/v3/completions")
        .headers(header)
        .json(&data)
        .send()
        .await?
        .text()
        .await?;    
    let mut completion_values = Vec::new();
    for json_str in response.split("}{") {
        let mut json = json_str.to_string();
        if !json_str.starts_with('{') {
            json.insert(0, '{');
        }
        if !json_str.ends_with('}') {
            json.push('}');
        }
        let value: serde_json::Value = serde_json::from_str(&json)?;        
        let completion_value = value['completion'].as_str().unwrap_or("");
        completion_values.push(completion_value);
    }
    let combined_completion = completion_values.join("");
    Ok(combined_completion)
}
该代码使用 reqwest 库发送 POST 请求,并使用 serde_json 库解析响应的 JSON 数据。代码将响应数据拆分为多个独立的 JSON 对象,并提取每个对象中的 completion 字段的值。最后将所有 completion 值拼接成一个字符串返回。
步骤:
- 使用 reqwest::Client::new()创建一个新的 HTTP 客户端。
- 创建一个新的 HeaderMap,并将请求头信息添加到其中。
- 创建一个新的 HashMap,并将请求体数据添加到其中。
- 使用 client.post()方法发送 POST 请求,并设置请求头和请求体。
- 使用 response.text()方法将响应体转换为字符串。
- 使用 response.split("}{ ")方法将响应数据拆分为多个独立的 JSON 对象。
- 遍历每个 JSON 对象,使用 serde_json::from_str()方法将其解析为serde_json::Value类型。
- 使用 value["completion"]获取completion字段的值,并将其添加到completion_values向量中。
- 使用 completion_values.join("")方法将所有completion值拼接成一个字符串返回。
注意事项:
- 确保已经安装了 reqwest和serde_json库。
- 响应数据必须是多个独立的 JSON 对象,并使用 }{分隔。
- 如果 completion字段不存在,则将返回空字符串。
 
原文地址: https://www.cveoy.top/t/topic/lBP5 著作权归作者所有。请勿转载和采集!