Rust 使用 reqwest 发送 POST 请求并解析 JSON 数据
use std::{io, collections::HashMap};
use reqwest::header::HeaderMap;
use serde::{Deserialize, Deserializer};
#[tokio::main]
async fn main() {
match send_post().await {
Ok(res) => {
// 解析返回的 JSON 数据
let data: Vec<Completion> = serde_json::Deserializer::from_str(&res)
.into_iter()
.map(|v| Completion::deserialize(v).unwrap())
.collect();
// 获取 completion 字段的值
let completions: Vec<String> = data.iter().map(|c| c.completion.clone()).collect();
println!('{:#?}', completions);
}
Err(e) => {
eprintln!('{:?}', e)
}
}
}
// 表示一个 completion 对象
#[derive(Debug, Deserialize)]
struct Completion {
#[serde(rename = 'completion')]
completion: String,
}
async fn send_post() -> Result<String, reqwest::Error> {
let client = reqwest::Client::new();
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'));
let mut data = HashMap::new();
data.insert('prompt', 'hello');
Ok(client.post('https://free-api.cveoy.com/v3/completions')
.headers(header)
.json(&data)
.send()
.await?
.text()
.await?)
}
注意:
- 为了使用
serde库,你需要在Cargo.toml文件中添加以下依赖项:
[dependencies]
serde = { version = '1.0', features = ['derive'] }
serde_json = '1.0'
- 确保你的 API 接口返回的 JSON 数据格式是正确的,并且每个对象都包含
completion字段。
这个代码示例演示了如何使用 Rust 中的 reqwest 库发送 POST 请求到 API 接口,并使用 serde 库解析返回的 JSON 数据,提取其中的 completion 字段。你可以根据你的实际情况修改代码,例如修改 API 接口地址、请求参数和数据解析方式。
原文地址: https://www.cveoy.top/t/topic/lBNP 著作权归作者所有。请勿转载和采集!