検索すると reqwest のカスタムヘッダーの使い方は割とあるのですが、複数とか get とかはあまり見なかったので。
まずは reqwest::blocking::get を使って戻ってきた内容を検索。
// cargo.toml [dependencies] reqwest = { version = "*", features = ["blocking"] } regex = "*"
use std::error::Error; use regex::Regex; fn main() -> Result<(), Box<dyn Error>> { let resp = reqwest::blocking::get("http://radiko.jp/apps/js/playerCommon.js")?.text().unwrap(); let re = Regex::new(r"pc_html5', '(\w*)'").unwrap(); let caps = re.captures(&resp).unwrap(); let caps2 :&str = &caps[1]; println!("{}", &caps2); }
reqwest::blocking::Client を使ってカスタムヘッダーを複数つけて、戻ってきたヘッダーをかなり強引に String 化と usize 化。
use std::error::Error; fn main() -> Result<(), Box<dyn Error>> { let client = reqwest::blocking::Client::new(); let resp2 = client .get("https://radiko.jp/v2/api/auth1") .header("X-Radiko-App","pc_html5") .header("X-Radiko-App-Version","0.0.1") .header("X-Radiko-User","dummy_user") .header("X-Radiko-Device","pc") .send() .unwrap(); // ヘッダーの内容を String 化 //println!("{:?}",resp2.headers()); let authtoken :String = resp2.headers().get("x-radiko-authtoken").unwrap().to_str().unwrap().to_string(); //println!("{}",authtoken); // ヘッダーの内容を usize 化 let keyoffset :usize = resp2.headers().get("x-radiko-keyoffset").unwrap().to_str().unwrap().parse().unwrap(); //println!("{}", keyoffset ); // 同上 let keylength :usize = resp2.headers().get("x-radiko-keylength").unwrap().to_str().unwrap().parse().unwrap(); println!("{}", keyoffset + keylength); //println!("{:?}", &caps2[keyoffset .. keyoffset + keylength]); }
debug mode で print debug する前提で、とりあえず動くようにだけ。