Request Object (HttpRequest)
Overview
HttpRequest
represents an incoming HTTP request and provides utilities for accessing query parameters, request headers, body content, and more.
Creating a Request Object
HttpRequest is automatically passed to route handlers.
Example:
use ripress::{context::{HttpRequest, HttpResponse}};
async fn handler(req: HttpRequest, res: HttpResponse) -> HttpResponse {
let body = req.text().unwrap_or("No body".to_string());
res.ok().text(format!("Received: {}", body))
}
Checking Content-Type
Checks if the Content-Type
of the request matches the specified type.
use ripress::{context::HttpRequest, types::RequestBodyType};
let req = HttpRequest::new();
req.is(RequestBodyType::JSON);
Returns true
if the Content-Type
matches, otherwise false
.
Getting Request Method
Returns the request's HTTP method.
use ripress::{context::HttpRequest, types::HttpMethods};
let req = HttpRequest::new();
let method: &HttpMethods = req.get_method();
Returns a reference to HttpMethods
enum.
Getting Request Origin URL
Returns the request's origin URL.
use ripress::context::HttpRequest;
let req = HttpRequest::new();
match req.get_origin_url() {
Ok(url) => println!("URL: {}", url),
Err(e) => println!("Error: {}", e)
}
Example Cases:
- For request:
GET /user/123
- origin_url →
/user/123
- origin_url →
- For request:
GET /user/123?q=hello
- origin_url →
/user/123?q=hello
- origin_url →
Returns Result<&str, &str>
.
Getting Request Path
Returns the request's path.
use ripress::context::HttpRequest;
let req = HttpRequest::new();
let path: &str = req.get_path();
Example Cases:
- For request:
GET /user/123?q=hello
- path →
/user/123
- path →
Returns &str
.
Getting Request Cookies
Returns the specified cookie value.
use ripress::context::HttpRequest;
let req = HttpRequest::new();
match req.get_cookie("session_id") {
Ok(value) => println!("Cookie: {}", value),
Err(e) => println!("Error: {:?}", e)
}
Returns Result<&str, HttpRequestError>
.
Getting Client's IP Address
Returns the client's IP address.
use ripress::context::HttpRequest;
let req = HttpRequest::new();
match req.ip() {
Ok(ip) => println!("IP: {}", ip),
Err(e) => println!("Error: {}", e)
}
Returns Result<&str, &str>
.
Getting Request Headers
Returns the specified header value.
use ripress::context::HttpRequest;
let req = HttpRequest::new();
match req.get_header("content-type") {
Ok(value) => println!("Header: {}", value),
Err(e) => println!("Error: {:?}", e)
}
Returns Result<&str, HttpRequestError>
.
Accessing URL Parameters
use ripress::context::HttpRequest;
let req = HttpRequest::new();
match req.get_params("id") {
Ok(value) => println!("ID: {}", value),
Err(e) => println!("Error: {:?}", e)
}
Example:
- Route:
GET /user/:id
- Request:
GET /user/123
get_params("id")
returnsOk("123")
Returns Result<&str, HttpRequestError>
.
Accessing Query Parameters
use ripress::context::HttpRequest;
let req = HttpRequest::new();
match req.get_query("q") {
Ok(value) => println!("Query: {}", value),
Err(e) => println!("Error: {:?}", e)
}
Example:
- URL:
GET /search?q=Ripress
get_query("q")
returnsOk("Ripress")
Returns Result<&str, HttpRequestError>
.
Getting Request Protocol
Returns the request's protocol.
use ripress::context::HttpRequest;
let req = HttpRequest::new();
let protocol: &str = req.get_protocol();
println!("Protocol: {}", protocol); // "http" or "https"
Returns &str
containing the protocol.
Checking If Request Is Secure
Returns whether the request was made over HTTPS.
use ripress::context::HttpRequest;
let req = HttpRequest::new();
let is_secure: bool = req.is_secure();
println!("Is Secure: {}", is_secure);
Returns bool
.
Get data from request that is inserted by middleware
use ripress::context::HttpRequest;
let req = HttpRequest::new();
req.set_data("id", "123");
let id = req.get_data("id");
println!("Id: {:?}", id);
Returns Option<&String>
with the data value if found, or None
if not found.
Set data to request from middleware
use ripress::context::HttpRequest;
let mut req = HttpRequest::new();
req.set_data("id", "123");
let id = req.get_data("id");
println!("Id: {:?}", id);
Reading Request Body
JSON Body
use ripress::context::HttpRequest;
use serde::Deserialize;
#[derive(Deserialize)]
struct User {
name: String,
age: u8,
}
let req = HttpRequest::new();
match req.json::<User>() {
Ok(user) => println!("Name: {}, Age: {}", user.name, user.age),
Err(e) => println!("Error: {}", e)
}
Returns Result<J, String>
where J
is your deserialized type.
Text Body
use ripress::context::HttpRequest;
let req = HttpRequest::new();
match req.text() {
Ok(text) => println!("Text: {}", text),
Err(e) => println!("Error: {}", e)
}
Returns Result<String, String>
.
Form Data
use ripress::context::HttpRequest;
use std::collections::HashMap;
let req = HttpRequest::new();
match req.form_data() {
Ok(form) => {
println!("Key: {:?}", form.get("key"));
println!("Key2: {:?}", form.get("key2"));
},
Err(e) => println!("Error: {}", e)
}
Returns Result<HashMap<String, String>, String>
.