19日に更新してた

アフィリエイトはないよ

rust, reqwest の get でカスタムヘッダーを複数使ってみたりした。

検索すると 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 する前提で、とりあえず動くようにだけ。