Rust Web アプリケーションを作成しています。API リクエストを作成し、リクエストの結果をレスポンスとして Web ビューに渡そうとしています。main.rs 、 route.rs 、および common.rs ファイルがあります。基本的に、main.rs ファイルは関連するルートを呼び出し、ルートは関数を呼び出します。問題は、ビルド時にエラーが発生しないことです。しかし、Web ブラウザーを使用して実行しようとすると、ブラウザーでこのエラーが発生します。
This page isn’t working
127.0.0.1 didn’t send any data.
ERR_EMPTY_RESPONSE
また、これはターミナルに表示されます。
thread 'actix-rt:worker:2' panicked at 'assertion failed: !headers.contains_key(CONTENT_TYPE)', src\search\routes\common.rs:15:9
私が知りたいのは、ヘッダーを正しい方法で送信しているかどうかです。それとも私は何か間違ったことをしていますか?どうすればこれを修正できますか?
route.rs
use crate::search::User;
use actix_web::{get, post, put, delete, web, HttpResponse, Responder};
use serde_json::json;
extern crate reqwest;
extern crate serde;
mod bfm;
mod common;
use actix_web::Result;
use actix_web::error;
use actix_web::http::{StatusCode};
#[get("/token")]
async fn get_token() -> Result<String> {
let set_token = common::authenticate();
return set_token.await
.map_err(|_err| error::InternalError::new(
std::io::Error::new(std::io::ErrorKind::Other, "failed to get token"),
StatusCode::INTERNAL_SERVER_ERROR
).into());
}
pub fn init_routes(cfg: &mut web::ServiceConfig) {
cfg.service(get_token);
}
common.rs
extern crate reqwest;
use reqwest::header::HeaderMap;
use reqwest::header::AUTHORIZATION;
use reqwest::header::CONTENT_TYPE;
pub async fn authenticate() -> Result<String, reqwest::Error> {
fn construct_headers() -> HeaderMap {
let mut headers = HeaderMap::new();
headers.insert(AUTHORIZATION, "Basic bghtyujhu==".parse().unwrap());
headers.insert(CONTENT_TYPE, "application/x-www-form-urlencoded".parse().unwrap());
assert!(headers.contains_key(AUTHORIZATION));
assert!(!headers.contains_key(CONTENT_TYPE));
headers
}
let client = reqwest::Client::new();
let reszr = client.post("https://api.test.com/auth/token")
.headers(construct_headers())
.body("grant_type=client_credentials")
.send()
.await?
.text()
.await;
return reszr;
}