Go Pentester - HTTP Servers(1)
2024-10-09 07:46:52
HTTP Server Basics
Use net/http package and useful third-party packages by building simple servers.
Building a Simple Server
package main import (
"fmt"
"net/http"
) func hello(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello %s\n", r.URL.Query().Get("name"))
} func main() {
http.HandleFunc("/hello", hello)
http.ListenAndServe(":8000",nil)
}
Run the above program and test it.
curl -i http://localhost:8000/hello?name=eric
You can also use http.ListenAndServeTLS(), which will start a server using HTTPS and TLS.
Build a Simple Router
package main import (
"fmt"
"net/http"
) type router struct {
} func (r *router) ServeHTTP(w http.ResponseWriter, req *http.Request) {
switch req.URL.Path {
case "/a":
fmt.Fprintf(w, "Executing /a\n")
case "/b":
fmt.Fprintf(w, "Executing /b\n")
case "/c":
fmt.Fprintf(w, "Executing /c\n")
default:
http.Error(w, "404 Not Found", 404)
}
} func main() {
var r router
http.ListenAndServe(":8000", &r)
}
Test the above program by the following commands.
curl http://localhost:8000/a
curl http://localhost:8000/d
Building simple Middleware
A simple middleware, which is a sort of wrapper that will execute on all incoming requests regardless of the destination function.
package main import (
"fmt"
"log"
"net/http"
"time"
) type logger struct {
Inner http.Handler
} func (l *logger) ServeHTTP(w http.ResponseWriter, r *http.Request) {
log.Printf("start %s\n", time.Now().String())
l.Inner.ServeHTTP(w,r)
log.Printf("finish %s",time.Now().String())
} func hello(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "Hello\n")
} func main() {
f := http.HandlerFunc(hello)
l := logger{Inner: f}
http.ListenAndServe(":8000", &l)
}
Run the program and issue a request.
curl http://localhost:8000
最新文章
- GitHub的使用之新建与更新代码
- java 集合:实现
- LuaAlchemy API 介绍
- pushState()、popstate事件配合ajax实现浏览器前进后退页面局部刷新
- C&;C++ recap
- .NET微信自定义分享标题、缩略图、超链接及描述的设置方法
- java 面向对象编程 第18章——网络编程
- 【linux】学习笔记
- 获取iOS设备属性
- centos主机建立ssh互信
- ios扫雷
- python_函数设计
- Hibernate Annotation _List/Map
- 改造一下jeecg中的部门树
- 关于vue中tamplate和DOM节点浅谈
- Android之密码的显示与隐藏
- HTTP 错误 404.0 - Not Found
- vcenter修改用户密码的方法
- Android 开发工具类 10_Toast 统一管理类
- 实现一个自定义event事件,包括on ,off,trigger,once