goProject/.svn/pristine/59/59761351ace94d6dc0a08b6752112ec23c9e90ea.svn-base

83 lines
5.2 KiB
Plaintext
Raw Permalink Normal View History

2025-01-06 16:21:36 +08:00
/*
此包提供通用的HTTP/HTTPS服务器功能
使用方法如下:
1、初始化一个HttpServer/HttpsServer
server := NewHttpServer(addr string, isCheckIP bool)
server := NewHttpsServer(addr, certFileName, keyFileName string, isCheckIP bool)
其中参数说明如下:
addr:服务器监听地址
isCheckIP:是否需要验证客户端IP此设置针对所有的请求对于每个请求也可以单独设置以此设置为优先
certFileName:证书文件的路径
keyFileName:密钥文件的路径
2、设置server的属性
在服务器运行过程中,会有一些默认的行为,如果想要改变默认行为,可以通过调用以下的方法进行设置
1、设定Http Header信息
SetHeader(header map[string]string)
默认的Http Header为空如果设定了Http Header则在每次请求时都会给ResponseWriter加上该header属性
2、设定HTTP请求方法
SetMethod(method string)
默认情况下对请求的方法没有任何限制如果设定了Method则只允许该Method访问
3、设定当HTTP请求方法无效时调用的处理器
SetInvalidMethodHandler(handler func(*Context))
默认情况下如果请求方法与所设置的方法不一致时会返回406错误如果设置了此属性则会调用此属性进行处理
4、设定默认页的处理器
SetDefaultPageHandler(handler func(*Context))
默认页指的是/, /favicon.ico这两个页面默认情况下仅仅是输出Welcome to home page.;如果需要针对做一些处理,可以设置此属性
5、设定未找到指定的回调时的处理器
SetNotFoundPageHandler(handler func(*Context))
当服务器找不到对应的地址的Handler时会返回404错误。如果需要处理一些非固定的地址时可以使用此方法比如回调地址中包含AppId所以导致地址可变
6、设定在Debug模式下是否需要验证IP地址
SetIfCheckIPWhenDebug(value bool)
默认情况下在DEBUG模式时不验证IP可以通过此属性改变此此行为
7、设定当IP无效时调用的处理器
SetIPInvalidHandler(handler func(*Context))
当需要验证IP并且IP无效时默认情况下会返回401错误如果设定了此属性则可以改变该行为
8、设定当检测到参数无效时调用的处理器
SetParamInvalidHandler(handler func(*Context))
当检测到参数无效时默认情况下会返回500错误如果设置了此属性则可以改变该行为
9、设定处理请求数据的处理器例如压缩、解密等
SetRequestDataHandler(handler func(*Context, []byte) ([]byte, error))
如果设定此属性,则在处理接收到的请求数据时,会调用此属性
10、设定处理响应数据的处理器例如压缩、加密等
SetResponseDataHandler(handler func(*Context, []byte) ([]byte, error))
如果设定此属性,则在处理返回给客户端的数据时,会调用此属性
11、设定请求执行时间的处理器
SetExecuteTimeHandler(handler func(*Context))
如果在请求结束后想要处理调用的时间,则需要设置此属性;例如请求时间过长则记录日志等
3、注册handler
server.RegisterHandler(path string, handlerFuncObj handlerFunc, configObj *HandlerConfig)
参数如下:
// path注册的访问路径
// callback回调方法
// configObjHandler配置对象
例如server.RegisterHandler("/get/notice", getNoticeConfig, &webServer.HandlerConfig{IsCheckIP: false, ParamNameList: []string{"appid"}})
4、启动对应的服务器
server.Start(wg *sync.WaitGroup)
5、context中提供了很多实用的方法
1、GetRequestPath() string获取请求路径该路径不带参数
2、GetRequestIP() string获取请求的客户端的IP地址
3、GetExecuteSeconds() int64获取请求执行的秒数。当然也可以通过获取StartTime, EndTime属性自己进行更高精度的处理
4、String() string将context里面的内容进行格式化主要用于记录日志
5、FormValue(key string) string获取请求的参数值包括GET/POST/PUT/DELETE等所有参数
6、PostFormValue(key string) string获取POST的参数值
7、GetFormValueData() typeUtil.MapData获取所有参数的MapData类型包括GET/POST/PUT/DELETE等所有参数
8、GetPostFormValueData() typeUtil.MapData获取POST参数的MapData类型
9、GetMultipartFormValueData() typeUtil.MapData获取MultipartForm的MapData类型
10、GetRequestBytes() (result []byte, exists bool, err error):获取请求字节数据
11、GetRequestString() (result string, exists bool, err error):获取请求字符串数据
12、Unmarshal(obj interface{}) (exists bool, err error)反序列化为对象JSON
13、WriteString(result string):输出字符串给客户端
14、WriteJson(result interface{})输出json数据给客户端
15、RedirectTo(url string):重定向到其它页面
如果以上的方法不能满足需求则可以调用以下的方法来获取原始的Request/ResponseWriter对象进行处理
16、GetRequest() *http.Request获取请求对象
17、GetResponseWriter() http.ResponseWriter获取响应对象
*/
package webServer