Rust 使用 reqwest 发送 POST 请求并解析 JSON 数据:错误处理与常见问题

本文将介绍使用 Rust 的 reqwest 库发送 POST 请求并解析 JSON 数据的示例,并重点讲解常见错误处理方法和解决方案,包括 API 数据格式不匹配、请求头设置错误、网络连接问题等。

代码示例

use std::{io, collections::HashMap};
use reqwest::header::HeaderMap;

#[tokio::main]
async fn main() {
    // let input_buf=get_user_input();

    // println!('{}',input_buf);
    match send_post().await {
        Ok(res)=>{println!('{:#?}',res)}
        Err(e)=>{eprintln!('{:?}',e)}
    }

}

//获取用户键盘输入
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<serde_json::Value, 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?
        .json::<serde_json::Value>()
        .await?)
}


错误解析

reqwest::Error { kind: Decode, source: Error('trailing characters', line: 2, column: 1) } 表示请求返回的数据不能被解码为 JSON 格式,常见原因如下:

  1. API 返回数据格式错误: 检查 API 文档,确保返回的数据格式为 JSON,并符合 JSON 规范,例如是否有未闭合的引号、缺少逗号等。
  2. 请求失败: 检查 API 地址是否正确,网络连接是否正常,并确认 API 是否可访问。
  3. 其他错误: 如果确认以上原因均不存在,可以尝试使用 println!('{:#?}', res) 打印返回的原始数据,查看数据格式是否符合 JSON 规范。

解决方案

  1. 验证 API 返回数据格式: 使用浏览器或其他工具访问 API 接口,查看返回的数据格式是否正确。如果数据格式不正确,需要联系 API 提供方寻求帮助。
  2. 使用调试工具: 使用 Rust 的调试工具,例如 println! 打印调试信息,或者使用调试器逐步执行代码,定位错误。
  3. 检查网络连接: 确保网络连接正常,并检查 API 地址是否正确。
  4. 使用其他 JSON 库: 可以尝试使用其他的 JSON 库进行解码,例如 serde_json 库。

总结

本文介绍了使用 Rust 的 reqwest 库发送 POST 请求并解析 JSON 数据的示例,以及常见错误处理方法和解决方案。在实际开发中,需要根据具体情况分析错误原因,并选择合适的解决方案。

Rust 使用 reqwest 发送 POST 请求并解析 JSON 数据:错误处理与常见问题

原文地址: https://www.cveoy.top/t/topic/lBMV 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录