-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhttp.go
66 lines (55 loc) · 1.65 KB
/
http.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
package main
import (
"fmt"
"io"
"net/http"
"net/http/httputil"
)
/*
getDiscourseData gets data from Discourse forum site.
*/
func getDiscourseData(requestURL string) (int, []byte, error) {
// build request
request, err := http.NewRequest(http.MethodGet, requestURL, nil)
if err != nil {
return -1, nil, fmt.Errorf("error [%w] at http.NewRequest()", err)
}
request.Header.Set("User-Agent", userAgent)
request.Header.Set("Content-Type", "application/json")
request.Header.Set("Accept", "application/json")
request.Header.Set("User-Api-Key", *userapikey)
// log.Printf("outgoing HTTP request\n%v", DumpOutgoingRequest(request, true))
// send request
response, err := httpClient.Do(request)
if err != nil {
return -1, nil, fmt.Errorf("error [%w] at httpClient.Do()", err)
}
defer response.Body.Close()
// log.Printf("incoming HTTP response: header fields\n%v", DumpResponse(response, true))
// process response
bodyData, err := io.ReadAll(response.Body)
if err != nil {
return -1, nil, fmt.Errorf("error [%v] at io.ReadAll()", err)
}
return response.StatusCode, bodyData, nil
}
/*
DumpOutgoingRequest dumps outgoing HTTP request.
*/
func DumpOutgoingRequest(req *http.Request, body bool) string {
requestDump, err := httputil.DumpRequestOut(req, body)
if err != nil {
return fmt.Sprintf("error [%v] at httputil.DumpRequestOut()", err)
}
return string(requestDump)
}
/*
DumpResponse dumps incoming HTTP response
*/
func DumpResponse(resp *http.Response, body bool) string {
responseDump, err := httputil.DumpResponse(resp, body)
if err != nil {
return fmt.Sprintf("error [%v] at httputil.DumpResponse()", err)
}
return string(responseDump)
}