通过网络发送 "application/x-www-form-urlencoded" 数据代替 JSON
Sending "application/x-www-form-urlencoded" data in place of JSON over network
我用来通过网络序列化的结构的定义
pub struct NetworkData {
id: String,
status: String,
details: <Data Structure>,
}
现在有一个函数接受这个结构,序列化它
并通过网络发送。
fn send_data(data: NetworkData ...) -> ... {
let data = serde_json::to_string(&data).expect("serialize issue");
let mut request = Request::new(reqwest::Method::POST, url);
*request.body_mut() = Some(data.into());
self.inner
.execute(request)
...
}
现在我想通过网络发送 "x-www-form-urlencoded" 数据,应该
按如下方式更改此功能:-
fn send_data(data: NetworkData ...) -> ... {
// How should I change this?????
//let data = serde_json::to_string(&data).expect("serialize issue");
let mut request = Request::new(reqwest::Method::POST, url);
let content_type = HeaderValue::from_str(&format!("{}", "application/x-www-form-urlencoded",))
.expect("Header value creation bug");
request
.headers_mut()
.insert(header::CONTENT_TYPE, content_type);
*request.body_mut() = Some(data.into());
self.inner
.execute(request)
...
}
但是我应该如何组织我的 "data" 以适应这张照片。
您很可能可以像使用 JSON 一样使用 serde_urlencoded crate。
我不知道你的 <Data Structure>
长什么样,因为你没有提供,但是 serde_urlencoded crate 只支持基本类型,所以如果你有更多花哨的东西,你'你必须想出你自己的转变; x-www-form-urlencoded 只是一组 key=value
对。无论如何,这是一个工作示例:
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug)]
pub struct NetworkData {
id: String,
status: String,
data: u32,
}
fn main() {
let data = NetworkData {
id: "ID".into(),
status: "Status".into(),
data: 42,
};
let data = serde_urlencoded::to_string(&data).expect("serialize issue");
println!("{}", data);
}
我用来通过网络序列化的结构的定义
pub struct NetworkData {
id: String,
status: String,
details: <Data Structure>,
}
现在有一个函数接受这个结构,序列化它 并通过网络发送。
fn send_data(data: NetworkData ...) -> ... {
let data = serde_json::to_string(&data).expect("serialize issue");
let mut request = Request::new(reqwest::Method::POST, url);
*request.body_mut() = Some(data.into());
self.inner
.execute(request)
...
}
现在我想通过网络发送 "x-www-form-urlencoded" 数据,应该 按如下方式更改此功能:-
fn send_data(data: NetworkData ...) -> ... {
// How should I change this?????
//let data = serde_json::to_string(&data).expect("serialize issue");
let mut request = Request::new(reqwest::Method::POST, url);
let content_type = HeaderValue::from_str(&format!("{}", "application/x-www-form-urlencoded",))
.expect("Header value creation bug");
request
.headers_mut()
.insert(header::CONTENT_TYPE, content_type);
*request.body_mut() = Some(data.into());
self.inner
.execute(request)
...
}
但是我应该如何组织我的 "data" 以适应这张照片。
您很可能可以像使用 JSON 一样使用 serde_urlencoded crate。
我不知道你的 <Data Structure>
长什么样,因为你没有提供,但是 serde_urlencoded crate 只支持基本类型,所以如果你有更多花哨的东西,你'你必须想出你自己的转变; x-www-form-urlencoded 只是一组 key=value
对。无论如何,这是一个工作示例:
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug)]
pub struct NetworkData {
id: String,
status: String,
data: u32,
}
fn main() {
let data = NetworkData {
id: "ID".into(),
status: "Status".into(),
data: 42,
};
let data = serde_urlencoded::to_string(&data).expect("serialize issue");
println!("{}", data);
}