Rust 使用 reqwest 发送 POST 请求并解析多个 JSON 响应获取 completion 值
使用 Rust 发送 POST 请求并解析多个 JSON 响应获取 completion 值
本文将展示如何使用 Rust 的 reqwest 库发送 POST 请求,解析多个 JSON 响应,并提取 completion 字段的值,最终将所有 completion 值合并成一个字符串。
代码示例
use reqwest::header::{HeaderMap, HeaderValue};
use std::collections::HashMap;
use serde_json::{Value, from_str};
async fn send_post() -> Result<String, reqwest::Error> {
let client = reqwest::Client::new();
// post 请求头
let mut header = HeaderMap::new();
header.insert("User-Agent", HeaderValue::from_str("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36").expect("Unsolve the userAgent header value."));
header.insert("referer", HeaderValue::from_str("https//www.covery.com").expect("Unsolve the referer value."));
header.insert("sec-ch-ua", HeaderValue::from_str("sec-ch-ua").expect("ms"));
// post 请求体
let mut data = HashMap::new();
data.insert("prompt", "hello");
let response_text = client.post("https://free-api.cveoy.com/v3/completions")
.headers(header)
.json(&data)
.send()
.await?
.text()
.await?;
let mut completions = Vec::new();
for json_str in response_text.split("}{") {
let mut json = json_str.to_owned();
if !json.starts_with('{') {
json = '{'.to_owned() + &json;
}
if !json.ends_with('}') {
json = json + '}';
}
let value: Value = from_str(&json)?;
let completion = value['completion'].as_str().unwrap_or("");
completions.push(completion.to_owned());
}
Ok(completions.join(""))
}
代码解析
-
发送 POST 请求:
- 使用
reqwest库创建Client对象,并使用post方法发送 POST 请求。 - 使用
headers方法设置请求头,包含User-Agent、referer和sec-ch-ua。 - 使用
json方法将请求体数据转换为 JSON 格式。 - 使用
send方法发送请求,并使用await等待响应。 - 使用
text方法获取响应的文本内容。
- 使用
-
解析 JSON 响应:
- 使用
split方法将响应文本内容分割成多个 JSON 字符串,每个字符串代表一个 JSON 对象。 - 使用
serde_json::from_str方法将每个 JSON 字符串解析成Value对象。 - 使用
Value['completion'].as_str().unwrap_or("")获取completion字段的值,并将其存储在completions向量中。
- 使用
-
合并 completion 值:
- 使用
join方法将completions向量中的所有字符串合并成一个字符串,并返回。
- 使用
注意事项
- 由于 JSON 字符串之间没有分隔符,所以需要手动添加分隔符
}{来分割字符串。 - 需要判断每个 JSON 字符串是否以
{和}开头和结尾,因为有可能被截断,缺少这些字符。
总结
本文提供了一个使用 Rust 发送 POST 请求,解析多个 JSON 响应并提取 completion 值的完整示例。通过使用 reqwest 和 serde_json 库,我们可以轻松地实现这一功能。
原文地址: https://www.cveoy.top/t/topic/lBPR 著作权归作者所有。请勿转载和采集!