Rust 使用 reqwest 和 serde 发送 POST 请求并解析 JSON 数据
/*
-
@Author: rgoogle 110@qq.com
-
@Date: 2023-03-12 10:30:23
-
@LastEditors: rgoogle 110@qq.com
-
@LastEditTime: 2023-03-12 12:54:48
-
@FilePath: \chatgpt\src\main.rs
-
@Description: 这是默认设置,请设置
customMade, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE */ use std::{io, collections::HashMap}; use std::io::BufRead; use reqwest::header::HeaderMap; use serde::{Deserialize}; use serde_derive::Deserialize; #[tokio::main] async fn main() { // let input_buf=get_user_input();// println!('{}',input_buf); match send_post().await { Ok(res)=>{ println!('{:#?}',res); let data:Vec
=serde_json::from_str(&res) .map(|v| Completion::deserialize(v).map_err(|e| format!('Deserialization error: {}', e))).unwrap() .collect(); let completions:Vec =data.iter().map(|c| c.completion.clone()).collect(); println!('{:#?}',completions); } Err(e)=>{eprintln!('{:?}',e)} }
}
#[derive(Debug, Deserialize)] struct Completion{ #[serde(rename='completion')] completion:String, }
//获取用户键盘输入 fn _get_user_input() -> String { let mut input_buf = String::new(); let _input = io::stdin().read_line(&mut input_buf).expect('fail to get user input.'); input_buf }
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');
Ok(client.post('https://free-api.cveoy.com/v3/completions')
.headers(header)
.json(&data)
.send()
.await?
.text()
.await?
)
}
原文地址: https://www.cveoy.top/t/topic/lBOP 著作权归作者所有。请勿转载和采集!