mirror of
https://github.com/lune-org/lune.git
synced 2025-05-04 10:43:57 +01:00
Much better handling of default headers in http client
This commit is contained in:
parent
05a47bd9dc
commit
18f58692e3
2 changed files with 29 additions and 12 deletions
|
@ -1,7 +1,7 @@
|
||||||
use hyper::{
|
use hyper::{
|
||||||
body::{Bytes, Incoming},
|
body::{Bytes, Incoming},
|
||||||
client::conn::http1::handshake,
|
client::conn::http1::handshake,
|
||||||
header::LOCATION,
|
header::{HeaderValue, ACCEPT, CONTENT_LENGTH, HOST, LOCATION, USER_AGENT},
|
||||||
Method, Request as HyperRequest, Response as HyperResponse, Uri,
|
Method, Request as HyperRequest, Response as HyperResponse, Uri,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -11,6 +11,7 @@ use url::Url;
|
||||||
use crate::{
|
use crate::{
|
||||||
client::{http_stream::HttpStream, ws_stream::WsStream},
|
client::{http_stream::HttpStream, ws_stream::WsStream},
|
||||||
shared::{
|
shared::{
|
||||||
|
headers::create_user_agent_header,
|
||||||
hyper::{HyperExecutor, HyperIo},
|
hyper::{HyperExecutor, HyperIo},
|
||||||
request::Request,
|
request::Request,
|
||||||
response::Response,
|
response::Response,
|
||||||
|
@ -45,6 +46,31 @@ pub async fn send_request(mut request: Request, lua: Lua) -> LuaResult<Response>
|
||||||
.to_string()
|
.to_string()
|
||||||
.parse::<Url>()
|
.parse::<Url>()
|
||||||
.expect("uri is valid");
|
.expect("uri is valid");
|
||||||
|
|
||||||
|
// Some headers are required by most if not
|
||||||
|
// all servers, make sure those are present...
|
||||||
|
if !request.headers().contains_key(HOST.as_str()) {
|
||||||
|
if let Some(host) = url.host_str() {
|
||||||
|
let host = HeaderValue::from_str(host).into_lua_err()?;
|
||||||
|
request.inner.headers_mut().insert(HOST, host);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !request.headers().contains_key(USER_AGENT.as_str()) {
|
||||||
|
let ua = create_user_agent_header(&lua)?;
|
||||||
|
let ua = HeaderValue::from_str(&ua).into_lua_err()?;
|
||||||
|
request.inner.headers_mut().insert(USER_AGENT, ua);
|
||||||
|
}
|
||||||
|
if !request.headers().contains_key(CONTENT_LENGTH.as_str()) && request.method() != Method::GET {
|
||||||
|
let len = request.inner.body().len().to_string();
|
||||||
|
let len = HeaderValue::from_str(&len).into_lua_err()?;
|
||||||
|
request.inner.headers_mut().insert(CONTENT_LENGTH, len);
|
||||||
|
}
|
||||||
|
if !request.headers().contains_key(ACCEPT.as_str()) {
|
||||||
|
let accept = HeaderValue::from_static("*/*");
|
||||||
|
request.inner.headers_mut().insert(ACCEPT, accept);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ... we can now safely continue and send the request
|
||||||
loop {
|
loop {
|
||||||
let stream = HttpStream::connect(url.clone()).await?;
|
let stream = HttpStream::connect(url.clone()).await?;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
#![allow(clippy::cargo_common_metadata)]
|
#![allow(clippy::cargo_common_metadata)]
|
||||||
|
|
||||||
use hyper::header::{HeaderValue, USER_AGENT};
|
|
||||||
use lune_utils::TableBuilder;
|
use lune_utils::TableBuilder;
|
||||||
use mlua::prelude::*;
|
use mlua::prelude::*;
|
||||||
|
|
||||||
|
@ -12,10 +11,7 @@ pub(crate) mod url;
|
||||||
use self::{
|
use self::{
|
||||||
client::ws_stream::WsStream,
|
client::ws_stream::WsStream,
|
||||||
server::{config::ServeConfig, handle::ServeHandle},
|
server::{config::ServeConfig, handle::ServeHandle},
|
||||||
shared::{
|
shared::{request::Request, response::Response, websocket::Websocket},
|
||||||
headers::create_user_agent_header, request::Request, response::Response,
|
|
||||||
websocket::Websocket,
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const TYPEDEFS: &str = include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/types.d.luau"));
|
const TYPEDEFS: &str = include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/types.d.luau"));
|
||||||
|
@ -45,12 +41,7 @@ pub fn module(lua: Lua) -> LuaResult<LuaTable> {
|
||||||
.build_readonly()
|
.build_readonly()
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn net_request(lua: Lua, mut req: Request) -> LuaResult<Response> {
|
async fn net_request(lua: Lua, req: Request) -> LuaResult<Response> {
|
||||||
if !req.headers().contains_key(USER_AGENT.as_str()) {
|
|
||||||
let ua = create_user_agent_header(&lua)?;
|
|
||||||
let ua = HeaderValue::from_str(&ua).into_lua_err()?;
|
|
||||||
req.inner.headers_mut().insert(USER_AGENT, ua);
|
|
||||||
}
|
|
||||||
self::client::send_request(req, lua).await
|
self::client::send_request(req, lua).await
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue