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 著作权归作者所有。请勿转载和采集!