Closed15

RustでHTTPS使って外部API叩いて、JSONで値返ってきてほしい

httpsは他のライブラリ使わなきゃいけないみたいだからとりあえずhttpで

エラー

    let req = Request::builder()
        .method(Method::POST)
        .uri(URL)
        .header("authorization", "hoge")
        .header("client-id", "huga")
        .body(POST_DATA.into())
        .unwrap();

    let client = Client::new();

    let resp = client.request(req).await?;

    println!("Response: {}", resp.status());

→Response: 301 Moved Permanently
なんでや

The HyperText Transfer Protocol (HTTP) の 301 Moved Permanently リダイレクトステータスコードは、リクエストされたリソースが Location ヘッダーで示された URL へ完全に移動したことを示します。

locationにhttpsのURL書いてあったからhttpsじゃなきゃだめっぽい、つらい

bodyの中身の; 抜けてたせいだった・・・・・・・・・・

bodyの中身

 body: Body(Streaming)

なんだけど、みせてほしい

"stream" は非同期な値の連なりです。 Rust の std::iter::Iterator の非同期バージョンに相当するもので、 Stream トレイトによって表現されます。 "stream" は async 関数の中でイテレートすることができます。 また、アダプタを利用して変形させることも可能です。

ほう

Hyperはライブラリを作る人向けだからreqwestでやっぱりやり直す。星の数で選んじゃだめ

Response {
url: Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("api.igdb.com")), port: None, path: "/v4/games", query: None, fragment: None },
status: 200,
headers: {略} }

bodyどこいった?

  let client = Client::new();
  let res = client
    .post(URL)
    .header("authorization", AUTHORIZATION)
    .header("client-id", CLIENT_ID)
    .body(post_data)
    .send()
    .await?
    .json::<Vec<hoge>>()
    .await?;

いけた。。。うれしい。

このスクラップは5ヶ月前にクローズされました
ログインするとコメントできます