hide noneed method and struct

This commit is contained in:
huangsimin 2018-11-23 15:30:52 +08:00
parent adc50c8a62
commit 26d20bfb5b
3 changed files with 58 additions and 55 deletions

52
base.go
View File

@ -4,11 +4,11 @@ import (
"container/heap" "container/heap"
) )
// Nodes for Heap, Container List // parseQueue for Heap, Container List
type Nodes []*ParseFunction type parseQueue []*parseFunction
// ParseFunction 优先执行参数 // parseFunction 优先执行参数
type ParseFunction struct { type parseFunction struct {
ExecuteFunction func(u *CURL, soption string) ExecuteFunction func(u *CURL, soption string)
ParamCURL *CURL ParamCURL *CURL
ParamData string ParamData string
@ -16,29 +16,29 @@ type ParseFunction struct {
} }
// Execute 执行 函数 // Execute 执行 函数
func (pf *ParseFunction) Execute() { func (pf *parseFunction) Execute() {
pf.ExecuteFunction(pf.ParamCURL, pf.ParamData) pf.ExecuteFunction(pf.ParamCURL, pf.ParamData)
} }
// Swap 实现sort.Iterface // Swap 实现sort.Iterface
func (nodes *Nodes) Swap(i, j int) { func (nodes *parseQueue) Swap(i, j int) {
ns := *nodes ns := *nodes
ns[i], ns[j] = ns[j], ns[i] ns[i], ns[j] = ns[j], ns[i]
} }
// Less Priority Want Less // Less Priority Want Less
func (nodes *Nodes) Less(i, j int) bool { func (nodes *parseQueue) Less(i, j int) bool {
ns := *nodes ns := *nodes
return ns[i].Prioty < ns[j].Prioty return ns[i].Prioty < ns[j].Prioty
} }
// Push 实现heap.Interface接口定义的额外方法 // Push 实现heap.Interface接口定义的额外方法
func (nodes *Nodes) Push(exec interface{}) { func (nodes *parseQueue) Push(exec interface{}) {
*nodes = append(*nodes, exec.(*ParseFunction)) *nodes = append(*nodes, exec.(*parseFunction))
} }
// Pop 堆顶 // Pop 堆顶
func (nodes *Nodes) Pop() (exec interface{}) { func (nodes *parseQueue) Pop() (exec interface{}) {
nlen := nodes.Len() nlen := nodes.Len()
exec = (*nodes)[nlen-1] // 返回删除的元素 exec = (*nodes)[nlen-1] // 返回删除的元素
*nodes = (*nodes)[:nlen-1] // [n:m]不包括下标为m的元素 *nodes = (*nodes)[:nlen-1] // [n:m]不包括下标为m的元素
@ -46,39 +46,39 @@ func (nodes *Nodes) Pop() (exec interface{}) {
} }
// Len len(nodes) // Len len(nodes)
func (nodes *Nodes) Len() int { func (nodes *parseQueue) Len() int {
return len(*nodes) return len(*nodes)
} }
// PQueueExecute 优先函数队列 // pQueueExecute 优先函数队列
type PQueueExecute struct { type pQueueExecute struct {
nodes Nodes nodes parseQueue
} }
// NewPQueueExecute Create A PQueueExecute // newPQueueExecute Create A pQueueExecute
func NewPQueueExecute() *PQueueExecute { func newPQueueExecute() *pQueueExecute {
pe := &PQueueExecute{} pe := &pQueueExecute{}
pe.nodes = make(Nodes, 0) pe.nodes = make(parseQueue, 0)
heap.Init(&pe.nodes) heap.Init(&pe.nodes)
return pe return pe
} }
// Push Create A PQueueExecute // Push Create A pQueueExecute
func (pqe *PQueueExecute) Push(exec *ParseFunction) { func (pqe *pQueueExecute) Push(exec *parseFunction) {
heap.Push(&pqe.nodes, exec) heap.Push(&pqe.nodes, exec)
} }
// Pop Create A PQueueExecute // Pop Create A pQueueExecute
func (pqe *PQueueExecute) Pop() *ParseFunction { func (pqe *pQueueExecute) Pop() *parseFunction {
return heap.Pop(&pqe.nodes).(*ParseFunction) return heap.Pop(&pqe.nodes).(*parseFunction)
} }
// Len Create A PQueueExecute // Len Create A pQueueExecute
func (pqe *PQueueExecute) Len() int { func (pqe *pQueueExecute) Len() int {
return pqe.nodes.Len() return pqe.nodes.Len()
} }
// func (pqe *PQueueExecute) String() string { // func (pqe *pQueueExecute) String() string {
// content := "" // content := ""
// for _, node := range pqe.nodes { // for _, node := range pqe.nodes {
// content += strconv.Itoa(node.Prioty) // content += strconv.Itoa(node.Prioty)

View File

@ -6,14 +6,14 @@ import (
) )
func TestPQueue(t *testing.T) { func TestPQueue(t *testing.T) {
PQExec := NewPQueueExecute() PQExec := newPQueueExecute()
PQExec.Push(&ParseFunction{Prioty: 5}) PQExec.Push(&parseFunction{Prioty: 5})
PQExec.Push(&ParseFunction{Prioty: 10}) PQExec.Push(&parseFunction{Prioty: 10})
PQExec.Push(&ParseFunction{Prioty: 4}) PQExec.Push(&parseFunction{Prioty: 4})
PQExec.Push(&ParseFunction{Prioty: 4}) PQExec.Push(&parseFunction{Prioty: 4})
PQExec.Push(&ParseFunction{Prioty: 20}) PQExec.Push(&parseFunction{Prioty: 20})
PQExec.Push(&ParseFunction{Prioty: 10}) PQExec.Push(&parseFunction{Prioty: 10})
PQExec.Push(&ParseFunction{Prioty: 15}) PQExec.Push(&parseFunction{Prioty: 15})
content := "" content := ""
for PQExec.Len() > 0 { for PQExec.Len() > 0 {

View File

@ -54,8 +54,11 @@ func NewCURL(scurl ...string) *CURL {
} }
func (curl *CURL) String() string { func (curl *CURL) String() string {
return fmt.Sprintf("Method: %s\nParsedURL: %s\nHeader: %s\nCookie: %s", if curl != nil {
curl.Method, curl.ParsedURL.String(), curl.Header, curl.Cookies) return fmt.Sprintf("Method: %s\nParsedURL: %s\nHeader: %s\nCookie: %s",
curl.Method, curl.ParsedURL.String(), curl.Header, curl.Cookies)
}
return ""
} }
// CreateSession 创建Session // CreateSession 创建Session
@ -110,7 +113,7 @@ func ParseRawCURL(scurl string) (cURL *CURL, err error) {
} }
}() }()
executor := NewPQueueExecute() executor := newPQueueExecute()
curl := NewCURL() curl := NewCURL()
scurl = strings.TrimSpace(scurl) scurl = strings.TrimSpace(scurl)
@ -145,32 +148,32 @@ func ParseRawCURL(scurl string) (cURL *CURL, err error) {
return curl, nil return curl, nil
} }
func judgeAndParseOptions(u *CURL, soption string) *ParseFunction { func judgeAndParseOptions(u *CURL, soption string) *parseFunction {
switch prefix := soption[0:2]; prefix { switch prefix := soption[0:2]; prefix {
case "-H": case "-H":
return &ParseFunction{ParamCURL: u, ParamData: soption, ExecuteFunction: parseHeader, Prioty: 10} return &parseFunction{ParamCURL: u, ParamData: soption, ExecuteFunction: parseHeader, Prioty: 10}
case "-X": case "-X":
return &ParseFunction{ParamCURL: u, ParamData: soption, ExecuteFunction: parseOptX, Prioty: 10} return &parseFunction{ParamCURL: u, ParamData: soption, ExecuteFunction: parseOptX, Prioty: 10}
case "-A": // User-Agent 先后顺序的问题 case "-A": // User-Agent 先后顺序的问题
data := extractData("^-A +(.+)", soption) data := extractData("^-A +(.+)", soption)
return &ParseFunction{ParamCURL: u, ParamData: data, ExecuteFunction: parseUserAgent, Prioty: 15} return &parseFunction{ParamCURL: u, ParamData: data, ExecuteFunction: parseUserAgent, Prioty: 15}
case "-I": case "-I":
return &ParseFunction{ParamCURL: u, ParamData: soption, ExecuteFunction: parseOptI, Prioty: 15} return &parseFunction{ParamCURL: u, ParamData: soption, ExecuteFunction: parseOptI, Prioty: 15}
case "--": case "--":
return parseLongOption(u, soption) return parseLongOption(u, soption)
case "-d": case "-d":
data := extractData("^-d +(.+)", soption) data := extractData("^-d +(.+)", soption)
return &ParseFunction{ParamCURL: u, ParamData: data, ExecuteFunction: parseBodyASCII, Prioty: 10} return &parseFunction{ParamCURL: u, ParamData: data, ExecuteFunction: parseBodyASCII, Prioty: 10}
case "-u": case "-u":
data := extractData("^-u +(.+)", soption) data := extractData("^-u +(.+)", soption)
return &ParseFunction{ParamCURL: u, ParamData: data, ExecuteFunction: parseUser, Prioty: 15} return &parseFunction{ParamCURL: u, ParamData: data, ExecuteFunction: parseUser, Prioty: 15}
case "-k": // -k, --insecure Allow insecure server connections when using SSL case "-k": // -k, --insecure Allow insecure server connections when using SSL
return &ParseFunction{ParamCURL: u, ParamData: soption, ExecuteFunction: parseInsecure, Prioty: 15} return &parseFunction{ParamCURL: u, ParamData: soption, ExecuteFunction: parseInsecure, Prioty: 15}
} }
return nil return nil
} }
func parseLongOption(u *CURL, soption string) *ParseFunction { func parseLongOption(u *CURL, soption string) *parseFunction {
// -d, --data <data> HTTP POST data // -d, --data <data> HTTP POST data
// --data-ascii <data> HTTP POST ASCII data // --data-ascii <data> HTTP POST ASCII data
// --data-binary <data> HTTP POST binary data // --data-binary <data> HTTP POST binary data
@ -190,27 +193,27 @@ func parseLongOption(u *CURL, soption string) *ParseFunction {
switch dtype { switch dtype {
case "binary": case "binary":
return &ParseFunction{ParamCURL: u, ParamData: data, ExecuteFunction: parseBodyBinary, Prioty: 10} return &parseFunction{ParamCURL: u, ParamData: data, ExecuteFunction: parseBodyBinary, Prioty: 10}
case "ascii": case "ascii":
return &ParseFunction{ParamCURL: u, ParamData: data, ExecuteFunction: parseBodyASCII, Prioty: 10} return &parseFunction{ParamCURL: u, ParamData: data, ExecuteFunction: parseBodyASCII, Prioty: 10}
case "raw": case "raw":
return &ParseFunction{ParamCURL: u, ParamData: data, ExecuteFunction: parseBodyRaw, Prioty: 10} return &parseFunction{ParamCURL: u, ParamData: data, ExecuteFunction: parseBodyRaw, Prioty: 10}
case "urlencode": case "urlencode":
return &ParseFunction{ParamCURL: u, ParamData: data, ExecuteFunction: parseBodyURLEncode, Prioty: 10} return &parseFunction{ParamCURL: u, ParamData: data, ExecuteFunction: parseBodyURLEncode, Prioty: 10}
case "data": case "data":
return &ParseFunction{ParamCURL: u, ParamData: data, ExecuteFunction: parseBodyASCII, Prioty: 10} return &parseFunction{ParamCURL: u, ParamData: data, ExecuteFunction: parseBodyASCII, Prioty: 10}
} }
case regexp.MustCompile("^--header").MatchString(soption): case regexp.MustCompile("^--header").MatchString(soption):
return &ParseFunction{ParamCURL: u, ParamData: soption, ExecuteFunction: parseHeader, Prioty: 10} return &parseFunction{ParamCURL: u, ParamData: soption, ExecuteFunction: parseHeader, Prioty: 10}
case regexp.MustCompile("^--user-agent").MatchString(soption): case regexp.MustCompile("^--user-agent").MatchString(soption):
data := extractData("^--user-agent +(.+)", soption) data := extractData("^--user-agent +(.+)", soption)
return &ParseFunction{ParamCURL: u, ParamData: data, ExecuteFunction: parseUserAgent, Prioty: 15} return &parseFunction{ParamCURL: u, ParamData: data, ExecuteFunction: parseUserAgent, Prioty: 15}
case regexp.MustCompile("^--user").MatchString(soption): case regexp.MustCompile("^--user").MatchString(soption):
data := extractData("^--user +(.+)", soption) data := extractData("^--user +(.+)", soption)
return &ParseFunction{ParamCURL: u, ParamData: data, ExecuteFunction: parseUser, Prioty: 15} return &parseFunction{ParamCURL: u, ParamData: data, ExecuteFunction: parseUser, Prioty: 15}
case regexp.MustCompile("^--insecure").MatchString(soption): case regexp.MustCompile("^--insecure").MatchString(soption):
return &ParseFunction{ParamCURL: u, ParamData: soption, ExecuteFunction: parseInsecure, Prioty: 15} return &parseFunction{ParamCURL: u, ParamData: soption, ExecuteFunction: parseInsecure, Prioty: 15}
} }
log.Println("can't parseOption", soption) log.Println("can't parseOption", soption)