/
request.go
89 lines (70 loc) · 1.85 KB
/
request.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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package singoriensis
import (
"net/http"
"net/url"
"strings"
"time"
"github.com/ErosZy/singoriensis/common"
sErr "github.com/ErosZy/singoriensis/error"
"github.com/ErosZy/singoriensis/interfaces"
)
type Request struct {
urlStr string
client *http.Client
params map[string]string
delegate interfaces.DownloaderInterface
}
func NewRequest(delegate interfaces.DownloaderInterface) Request {
client := &http.Client{
Timeout: time.Duration(time.Second * 10),
}
delegate.CallMiddlewareMethod("SetClient", []interface{}{client})
return Request{
delegate: delegate,
client: client,
}
}
func (self Request) Init(urlStr string) interfaces.RequestInterface {
self.urlStr = urlStr
return self
}
func (self Request) Request() (*common.Page, error) {
var err interface{} = nil
body := &strings.Reader{}
values := url.Values{}
if len(self.params) > 0 {
params := self.params
for v, k := range params {
values.Add(v, k)
}
body = strings.NewReader(values.Encode())
}
var page *common.Page = nil
req, reqError := http.NewRequest("GET", self.urlStr, body)
if reqError == nil {
requestError := sErr.RequestError{-1, false}
self.delegate.CallMiddlewareMethod("SetRequest", []interface{}{req, &requestError})
if requestError.Exist {
err = requestError
}
res, resError := self.client.Do(req)
if resError == nil {
responseError := sErr.ResponseError{false}
page := common.NewPage(req, res)
self.delegate.CallMiddlewareMethod("GetResponse", []interface{}{page, &responseError})
if responseError.Exist {
err = responseError
} else if res.StatusCode == 200 {
return page, nil
} else {
err = sErr.RequestError{res.StatusCode, true}
}
} else {
err = resError
}
} else {
err = reqError
}
self.delegate.CallMiddlewareMethod("Error", []interface{}{self.client, err})
return page, err.(error)
}