reqwest 请求示例

reqwest 请求示例:

  1. 读取图片
  2. 编码成base64
  3. 组装请求头、请求体,发起请求

返回值映射成HashMap:

use std::collections::HashMap;
use reqwest::header::HeaderMap;
use serde_json::value::Value;
use std::collections::hash_map::RandomState;
use reqwest::Error;

async fn do_post(url:&str,base64_str:&str) -> Result<HashMap<String, Value>, reqwest::Error>{
    let client = reqwest::Client::new();
    let mut headers = HeaderMap::new();
    headers.insert("Content-Type", "application/json".parse().unwrap());

    let mut data = HashMap::new();
    data.insert("file_content", base64_str);
    data.insert("channel_num", "CCTV");
    data.insert("file_id", "98997");
    data.insert("file_type", "jpg");
    data.insert("file_size", "45646");

    Ok(client.post(url)
    .headers(headers)
    .json(&data)
    .send()
    .await?
    .json::<HashMap<String, Value>>()
    .await?)
}


#[tokio::main]
async fn main() {
    let img_path = r"D:\cython\sanic_server\qianzi_pdf\other\0000.jpeg";
    let url = "http://192.168.140.131:5000/xxxx";
    let img_buffer = std::fs::read(img_path).unwrap();
    let base64_str = base64::encode(&img_buffer);
    if let Ok(res) = do_post(&url,&base64_str).await {
        println!("{:#?}", res);
    }
}

返回值映射成结构体:

[dependencies]
reqwest = { version = "0.10", features = ["json"] }
tokio = { version = "0.2", features = ["full"] }
base64="0.13.0"

serde = "*"
serde_derive = "*"
serde_json = "1.0"
use std::collections::HashMap;
use reqwest::header::HeaderMap;
extern crate serde;
extern crate serde_json;
#[macro_use]
extern crate serde_derive;

async fn do_post(url:&str,base64_str:&str) -> Result<ResponseJson, reqwest::Error>{
    let client = reqwest::Client::new();
    let mut headers = HeaderMap::new();
    headers.insert("Content-Type", "application/json".parse().unwrap());

    let mut data = HashMap::new();
    data.insert("file_content", base64_str);
    data.insert("channel_num", "CCTV");
    data.insert("file_id", "98997");
    data.insert("file_type", "jog");
    data.insert("file_size", "45646");

    Ok(client
    .post(url)
    .headers(headers)
    .json(&data)
    .send()
    .await?
    .json::<ResponseJson>()
    .await?)
}

#[derive(Deserialize)]
struct RecogResult {
    insured:String,
    policyholder:String
}


#[derive(Deserialize)]
struct ResponseJson {
    request_id:String,
    code:i32,
    file_id:String,
    recog_result:RecogResult,
    cost_time:i32,
}


#[tokio::main]
async fn main() {
    let img_path = r"D:\cython\sanic_server\qianzi_pdf\other\0000.jpeg";
    let url = "http://192.168.140.131:5000/xxxx";
    let img_buffer = std::fs::read(img_path).unwrap();
    let base64_str = base64::encode(&img_buffer);

    match do_post(&url,&base64_str).await {
        Ok(response_json) => {
            let value: ResponseJson = response_json;
            println!("shuchu: cost_time={}",value.cost_time);
            println!("shuchu: code={}",value.code);
            println!("shuchu: file_id={}",value.file_id);
            println!("shuchu: insured={}",value.recog_result.insured);
            println!("shuchu: policyholder={}",value.recog_result.policyholder);
            println!("shuchu: request_id={}",value.request_id);
        }
        Err(_) => {}
    }
}

拓展阅读:
reqwest中get与post请求与json解析:http://siciarz.net/24-days-rust-reqwest/
https://blog.csdn.net/wowotuo/article/details/88080943

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SongpingWang

你的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值