diff --git a/core/http/src/handling/request.rs b/core/http/src/handling/request.rs
index 8605de476f7646e787bf5d7222e6085cd2fa906c..a74685fafbf55d310c6c909ea6291252d57bb60a 100644
--- a/core/http/src/handling/request.rs
+++ b/core/http/src/handling/request.rs
@@ -30,13 +30,13 @@ pub enum MediaType {
     Html,
 }
 
-#[derive(Debug)]
+#[derive(Debug, PartialEq, Eq, PartialOrd, Ord)]
 pub enum ParseErrors {
     NoData,
     BadData,
 }
 
-#[derive(Debug)]
+#[derive(Debug, PartialEq, Eq, PartialOrd, Ord)]
 pub struct ParseFormError {
     pub error: ParseErrors,
 }
@@ -111,18 +111,18 @@ impl Request<'_> {
         Ok(response)
     }
 
-    pub fn get_post_data(
-        &self,
-        keys: &[&str],
+    pub fn get_post_data<'a>(
+        &'a self,
+        keys: &[&'a str],
         data: &Data,
     ) -> Result<HashMap<&str, Result<Vec<u8>, ParseFormError>>, ParseFormError> {
-        let mut post_type = if let Some(val) = self
+        let post_type = if let Some(val) = self
             .headers
             .iter()
             .find(|header| header.contains("Content-Type: "))
         {
-            if let Ok(Type) = val.strip_prefix("Content-Type: ").unwrap().trim().parse() {
-                Type
+            if let Ok(mime_type) = val.strip_prefix("Content-Type: ").unwrap().trim().parse() {
+                mime_type
             } else {
                 return Err(ParseFormError {
                     error: ParseErrors::NoData,
@@ -135,17 +135,52 @@ impl Request<'_> {
         };
 
         let data = data.buffer.as_slice();
-        let mut keymap: HashMap<&str, Option<&[u8]>> = HashMap::with_capacity(keys.len());
-        for i in keys {
-            keymap.entry(i).or_default();
+        let mut keymap: HashMap<&str, Result<Vec<u8>, ParseFormError>> =
+            HashMap::with_capacity(keys.len());
+        for key in keys {
+            keymap.entry(key).or_insert(Err(ParseFormError {
+                error: ParseErrors::NoData,
+            }));
         }
         match post_type {
-            Mime::ApplicationXWwwFormUrlencoded => Ok(()),
-            _ => Err(ParseFormError {
-                error: ParseErrors::BadData,
-            }),
+            Mime::ApplicationXWwwFormUrlencoded => {
+                for kvp in data.split(|byte| *byte == b'&') {
+                    let kvp = kvp.split(|byte| *byte == b'=').collect::<Vec<&[u8]>>();
+                    let key = if let Some(kv) = kvp.get(0) {
+                        kv
+                    } else {
+                        return Err(ParseFormError {
+                            error: ParseErrors::BadData,
+                        });
+                    };
+                    let key = if let Ok(kv) = String::from_utf8(key.to_vec()) {
+                        kv
+                    } else {
+                        return Err(ParseFormError {
+                            error: ParseErrors::BadData,
+                        });
+                    };
+                    let value = kvp.get(1).ok_or(ParseFormError {
+                        error: ParseErrors::NoData,
+                    });
+                    let thing = if let Some(val) = keymap.get_mut(key.as_str()) {
+                        val
+                    } else {
+                        continue;
+                    };
+                    *thing = match value {
+                        Ok(val) => Ok(val.to_vec()),
+                        Err(err) => Err(err),
+                    }
+                }
+            }
+            _ => {
+                return Err(ParseFormError {
+                    error: ParseErrors::BadData,
+                })
+            }
         };
-        todo!()
+        Ok(keymap)
     }
 
     // pub fn get_post_text_form_key(
@@ -288,38 +323,23 @@ mod test {
 
     use super::Request;
 
-    //     #[test]
-    //     fn try_post_text() {
-    //         let req = Request {
-    //             uri: "",
-    //             headers: vec!["Content-Type: multipart/form-data;boundary=\"boundary\"".to_string()],
-    //             method: crate::handling::methods::Method::Post,
-    //         };
-    //         let data = Data {
-    //             buffer: b"--boundary\r
-    // Content-Disposition: form-data; name=\"field1\"\r
-    // \r
-    // value1\r
-    // --boundary\r
-    // Content-Disposition: form-data; name=\"field2\"; filename=\"example.txt\"\n\r
-    // \r
-    // value2\r
-    // --boundary--"
-    //                 .to_vec(),
-    //             is_complete: true,
-    //         };
-    //         assert_eq!(
-    //             "value1",
-    //             req.get_post_text_form_key(&["field1"], &data).unwrap()[0]
-    //         );
-    //         assert_eq!(
-    //             "value2",
-    //             req.get_post_text_form_key(&["field2"], &data).unwrap()[0]
-    //         );
-    //         assert_eq!(
-    //             vec!["value1", "value2"],
-    //             req.get_post_text_form_key(&["field1", "field2"], &data)
-    //                 .unwrap()
-    //         )
-    //     }
+    #[test]
+    fn try_post_text() {
+        let req = Request {
+            uri: "",
+            headers: vec!["Content-Type: application/x-www-form-urlencoded".to_string()],
+            method: crate::handling::methods::Method::Post,
+        };
+        let data = Data {
+            buffer: b"message=23&message1=24".to_vec(),
+            is_complete: true,
+        };
+        assert_eq!(
+            vec![&Ok(b"23".to_vec()), &Ok(b"24".to_vec())],
+            req.get_post_data(&["message", "message1"], &data)
+                .unwrap()
+                .values()
+                .collect::<Vec<_>>()
+        );
+    }
 }
diff --git a/core/http/src/setup.rs b/core/http/src/setup.rs
index 50f51445549564b02e285c904b7a6ff76049da8c..4a3914b25034c96404c932051f772983cac1c4e9 100644
--- a/core/http/src/setup.rs
+++ b/core/http/src/setup.rs
@@ -96,7 +96,7 @@ pub async fn build(ip: &str) -> Config {
     let ip = ip[0];
     let workers = available_parallelism().unwrap().get();
     println!(
-        "\x1b[34mâš™ Configuration\x1b[0m
+"\x1b[34mâš™ Configuration\x1b[0m
   >> \x1b[34mIp\x1b[0m: {ip}
   >> \x1b[34mPort\x1b[0m: {port}
   >> \x1b[34mWorkers\x1b[0m: {workers}