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

83 lines
5.2 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
此包提供通用的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