forked from Lafeng/ezgoo
/
utils.go
74 lines (66 loc) · 1.38 KB
/
utils.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package main
import (
"bytes"
"fmt"
"net/http"
"runtime"
"strings"
log "github.com/Lafeng/ezgoo/glog"
)
const (
robots_response = "User-agent: *\nDisallow: /\n"
)
func dumpHeader(label string, h http.Header) {
var buf = new(bytes.Buffer)
fmt.Fprintln(buf, " "+label)
for k, arr := range h {
if len(arr) == 1 {
fmt.Fprintf(buf, " %s: %s\n", k, arr[0])
} else {
fmt.Fprintf(buf, " %s: [%s]\n", k, strings.Join(arr, "], ["))
}
}
fmt.Print(buf.String())
}
func dumpStack() string {
buf := new(bytes.Buffer)
pcArr := make([]uintptr, 20)
n := runtime.Callers(0, pcArr)
for i := 2; i < n; i++ {
pc := pcArr[i]
fn := runtime.FuncForPC(pc)
fmt.Fprintf(buf, "%s():0x%x\n", fn.Name(), fn.Entry())
file, line := fn.FileLine(pc)
fmt.Fprintf(buf, "\t%s:%d\n", file, line)
}
return buf.String()
}
func dumpError(v interface{}) error {
if v != nil {
var err error
switch v.(type) {
case error:
err = v.(error)
default:
err = fmt.Errorf("%v", v)
}
log.Errorf("Error: %v\n%s", err, dumpStack())
return err
}
return nil
}
func cookieString(ck *http.Cookie, reset_domain *string, setCookie bool) string {
if !setCookie {
// inaccurate
return ck.Name + "=" + ck.Value
}
if reset_domain != nil {
dot := strings.IndexByte(*reset_domain, '.')
if dot > 1 {
ck.Domain = *reset_domain
} else {
ck.Domain = NULL
}
}
return ck.String()
}