修改对 https 协议的支持
diff --git a/webservice.go b/webservice.go
index 067b172..ec8ff4c 100644
--- a/webservice.go
+++ b/webservice.go
@@ -4,6 +4,7 @@
"bytes"
"crypto/hmac"
"crypto/sha1"
+ "crypto/tls"
"encoding/hex"
"encoding/json"
"errors"
@@ -14,6 +15,7 @@
"net/http"
"net/url"
"strconv"
+ "strings"
"time"
)
@@ -86,9 +88,7 @@
}
func (w *WebSession) DoGet(uri string, params map[string]string) (*http.Response, error) {
- transport := http.Transport{Dial: dailTimeout}
-
- client := http.Client{Transport: &transport}
+ client := w.NewClient(3)
full_url := w.BaseUrl + uri
@@ -121,18 +121,23 @@
}
func (w *WebSession) NewClient(timeout int) *http.Client {
- transport := http.Transport{Dial: func(network, addr string) (net.Conn, error) {
- default_timeout := time.Duration(timeout) * time.Second
- return net.DialTimeout(network, addr, default_timeout)
- }}
-
+ var transport http.Transport
+ if strings.HasPrefix(w.BaseUrl, "https://") {
+ transport = http.Transport{TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
+ TLSHandshakeTimeout: time.Duration(timeout) * time.Second}
+ } else if strings.HasPrefix(w.BaseUrl, "http://") {
+ transport = http.Transport{Dial: func(network, addr string) (net.Conn, error) {
+ default_timeout := time.Duration(timeout) * time.Second
+ return net.DialTimeout(network, addr, default_timeout)
+ }}
+ }
return &http.Client{Transport: &transport}
}
+
func (w *WebSession) DoPost(uri string, param map[string]string) (*http.Response, error) {
- transport := http.Transport{Dial: dailTimeout}
- client := &http.Client{Transport: &transport}
+ client := w.NewClient(3)
param["app_id"] = w.AppId
- // param["term_id"] = w.TermId
+ param["term_id"] = w.TermId
param["sign_method"] = "HMAC"
param["session_key"] = w.session_key
ts := w.GetTimestamp()
@@ -140,7 +145,6 @@
param["sign"] = w.Sign(w.AppId + w.TermId + w.session_key + ts)
full_url := w.BaseUrl + uri
- // log.Debugf("Url=%v", full_url)
data, err := json.Marshal(param)
if err != nil {
return nil, err
@@ -188,9 +192,11 @@
params["term_id"] = w.TermId
r, err := w.DoGet(uri, params)
- if err != nil || r.StatusCode != 200 {
- fmt.Println("here")
+ if err != nil {
// log.Errorf("Status = %v, err = %v\n", r.StatusCode, err)
+ return "", err
+ }
+ if r.StatusCode != 200 {
return "", errors.New("请求失败")
}