JBa*_*art 3 urlencode rust reqwest
我正在尝试使用构建器的 query() 方法为 reqwest 客户端构建查询字符串。但其中一个参数必须是像这样编码的多个值
?dt=t&dt=at&dt=m
Run Code Online (Sandbox Code Playgroud)
我不知道怎么办。
use reqwest::blocking::Client;
use serde_json::{json, Value as JsonValue};
fn main() {
let query = json!({
"client": "gtx",
"ie": "UTF-8", // input encoding
"oe": "UTF-8", // output encoding
"sl": "auto", // source language
"tl": "en", // target language
"dt": ["t", "at", "m"], // <<<<< ERROR
"q": "salut les gars. ca va? on y va!", // text to translate
});
let client = Client::new();
let response = client.get("https://translate.googleapis.com/translate_a/single")
.query(&query)
.send()
.unwrap();
if response.status().is_success() {
let body: JsonValue = response.json().unwrap();
println!("detected language {:}", body.get(2).unwrap());
for item in body.get(0).and_then(JsonValue::as_array).unwrap() {
println!("{:}", item[1]);
println!("{:}", item[0]);
}
} else {
println!("fail {:?}", response);
}
}
reqwest::Error { kind: Builder, source: Custom("unsupported value") }
Run Code Online (Sandbox Code Playgroud)
也许不支持?我想我可以用格式手动构建字符串!作为最后的手段
您可以将查询参数构建为IntoIterator键值对。
例如,
let query = vec![
("client", "gtx"),
("ie", "UTF-8"), // input encoding
("oe", "UTF-8"), // output encoding
("sl", "auto"), // source language
("tl", "en"), // target language
("dt", "t"),
("dt", "at"),
("dt", "m"),
("q", "salut les gars. ca va? on y va!"), // text to translate
];
let client = Client::new();
let response = client.get("https://translate.googleapis.com/translate_a/single")
.query(&query)
.send()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4479 次 |
| 最近记录: |