网络安全最新30天拿下Rust之实战Web Server,2024年最新网络安全面试相关文章及Github学习资料

给大家的福利

零基础入门

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

同时每个成长路线对应的板块都有配套的视频提供:

在这里插入图片描述

因篇幅有限,仅展示部分资料

网络安全面试题

绿盟护网行动

还有大家最喜欢的黑客技术

网络安全源码合集+工具包

所有资料共282G,朋友们如果有需要全套《网络安全入门+黑客进阶学习资源包》,可以扫描下方二维码领取(如遇扫码问题,可以在评论区留言领取哦)~

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

HttpResponse::Ok().body("Hello Rust")

}

async fn new_route_handler() -> HttpResponse {
HttpResponse::Ok().body(“New route handler”)
}

#[actix_web::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| App::new().
route(“/”, actix_web::web::get().to(index))
.route(“/new_route”, actix_web::web::get().to(new_route_handler)))
.bind(“127.0.0.1:8080”)?
.run()
.await
}



#### 处理JSON请求


        对于API服务,经常需要处理JSON格式的请求与响应。修改Cargo.toml文件,引入serde和serde\_json来简化工作。



[dependencies]
actix-web = { version = “4.5.0”}
serde = { version = “1”, features = [“derive”] }
serde_json = “1”


        在下面的示例代码中,我们首先导入了serde库中的Deserialize和Serialize特质,它们用于定义结构体可以被自动序列化和反序列化为JSON格式。


        然后,定义了一个名为FormData的结构体,它有一个字段field\_name,类型为String。通过derive属性,该结构体获得了从JSON字符串自动反序列化(Deserialize)的能力,以及将自身序列化为JSON字符串(Serialize)的能力,Debug特征使得结构体可以方便地输出调试信息。我们还定义了一个名为JsonResponse的结构体,它有一个字段message,类型也为String。这里只应用了Serialize特质,因为这个结构体是用来构造返回给客户端的JSON响应报文的,不需要反序列化能力。


        最后,我们定义了处理POST请求的异步函数handle\_post,它接受一个类型为web::Json<FormData>的参数。web::Json是一个wrapper类型,表示请求体应该被解析为FormData结构体。函数内部首先打印接收到的POST数据,然后创建一个JsonResponse实例,其中message字段内容为"Hello from Rust Server"。函数的最后,返回一个201 Created状态码的响应,主体内容为序列化后的JsonResponse实例。



use actix_web::{web, App, HttpResponse, HttpServer, Result};
use serde::{Deserialize, Serialize};

#[derive(Deserialize, Serialize, Debug)]
struct FormData {
field_name: String,
}

#[derive(Serialize)]
struct JsonResponse {
message: String,
}

async fn index() -> HttpResponse {
HttpResponse::Ok().body(“Hello Rust”)
}

async fn new_route_handler() -> HttpResponse {
HttpResponse::Ok().body(“New route handler”)
}

async fn handle_post(form_data: web::Json) -> Result {
println!(“Received POST data: {:?}”, form_data.into_inner());
let response_data = JsonResponse {
message: format!(“Hello from {}”, “Rust Server”.to_string()),
};
Ok(HttpResponse::Created().json(response_data))
}

#[actix_web::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| {
App::new()
.route(“/”, web::get().to(index))
.route(“/new_route”, web::get().to(new_route_handler))
.route(“/post_data”, web::post().to(handle_post))
})
.bind(“127.0.0.1:8080”)?
.run()
.await
}


        在命令行中运行cargo run来启动程序,此时服务器开始监听localhost:8080。我们可以使用Postman来模拟浏览器发送POST请求的行为,方法选择POST,路径为localhost:8080/post\_data,Body选择raw/JSON,输入:{"field\_name": "Hello from client"}。点击Send按钮,我们会收到Rust Web Server返回的POST响应,Body为:{"message": "Hello from Rust Server"}。


![](https://img-blog.csdnimg.cn/direct/74b02607365540e4a73e4540cdec2510.png)



#### 处理动态路由参数


        要实现动态路由参数,我们可以使用actix-web提供的路径参数功能。路径参数允许我们在URL路径中定义占位符,这些占位符在请求到来时会被解析为具体的值。


        在下面的示例代码中,我们新增了一个异步函数handle\_dynamic\_route,它接受一个类型为web::Path<String>的参数。web::Path<T>是actix-web提供的一个类型,用于捕获路径参数。这里我们使用String类型来捕获动态路由中的ID。接着,在应用程序配置中,我们添加了一个新的路由。这里的/{id}路径模板中,{id}是一个占位符,表示任何非斜杠字符组成的字符串。当一个请求到达,其URL路径匹配/{id}模板时,actix-web会将路径中对应的值作为web::Path<String>传递给handle\_dynamic\_route函数。



use actix_web::{web, App, HttpResponse, HttpServer, Result};
use serde::{Deserialize, Serialize};

#[derive(Deserialize, Serialize, Debug)]
struct FormData {
field_name: String,
}

#[derive(Serialize)]
struct JsonResponse {
message: String,
}

async fn index() -> HttpResponse {
HttpResponse::Ok().body(“Hello Rust”)
}

async fn new_route_handler() -> HttpResponse {
HttpResponse::Ok().body(“New route handler”)
}

async fn handle_post(form_data: web::Json) -> Result {
println!(“Received POST data: {:?}”, form_data.into_inner());
let response_data = JsonResponse {
message: format!(“Hello from {}”, “Rust Server”.to_string()),
};
Ok(HttpResponse::Created().json(response_data))
}

async fn handle_dynamic_route(id: web::Path) -> HttpResponse {
HttpResponse::Ok().body(format!(
“Process dynamic route with ID: {}”,
id.into_inner()
))
}

#[actix_web::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| {
App::new()
.route(“/”, web::get().to(index))
.route(“/new_route”, web::get().to(new_route_handler))
.route(“/post_data”, web::post().to(handle_post))
.route(“/{id}”, web::get().to(handle_dynamic_route))
})
.bind(“127.0.0.1:8080”)?
.run()
.await
}



### 给大家的福利


**零基础入门**


对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。


![](https://img-blog.csdnimg.cn/img_convert/95608e9062782d28f4f04f821405d99a.png)


同时每个成长路线对应的板块都有配套的视频提供:


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/a91b9e8100834e9291cfcf1695d8cd42.png#pic_center)


因篇幅有限,仅展示部分资料

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 23
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值