init project
This commit is contained in:
parent
e7cb80d0b2
commit
1a05deb89d
139
sdk/client.go
139
sdk/client.go
@ -10,6 +10,9 @@ import (
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
|
||||
"net"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"os"
|
||||
"regexp"
|
||||
"runtime"
|
||||
"strings"
|
||||
"time"
|
||||
@ -28,6 +31,33 @@ type Client struct {
|
||||
readTimeout time.Duration
|
||||
connectTimeout time.Duration
|
||||
config *Config
|
||||
httpProxy string
|
||||
httpsProxy string
|
||||
noProxy string
|
||||
}
|
||||
|
||||
func (client *Client) GetNoProxy() string {
|
||||
return client.noProxy
|
||||
}
|
||||
|
||||
func (client *Client) SetNoProxy(noProxy string) {
|
||||
client.noProxy = noProxy
|
||||
}
|
||||
|
||||
func (client *Client) GetHttpsProxy() string {
|
||||
return client.httpsProxy
|
||||
}
|
||||
|
||||
func (client *Client) SetHttpsProxy(httpsProxy string) {
|
||||
client.httpsProxy = httpsProxy
|
||||
}
|
||||
|
||||
func (client *Client) SetHttpProxy(httpProxy string) {
|
||||
client.httpProxy = httpProxy
|
||||
}
|
||||
|
||||
func (client *Client) GetHttpProxy() string {
|
||||
return client.httpProxy
|
||||
}
|
||||
|
||||
func (client *Client) GetHTTPSInsecure() bool {
|
||||
@ -146,7 +176,32 @@ func (client *Client) DoAction(request requests.AcsRequest, response responses.A
|
||||
|
||||
func (client *Client) DoActionWithSigner(request requests.AcsRequest, response responses.AcsResponse, signer auth.Signer) (err error) {
|
||||
|
||||
httpRequest, err := client.buildRequestWithSigner(request, signer)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
client.setTimeOut(request)
|
||||
proxy, err := client.getHttpProxy(httpRequest.URL.Scheme)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
noProxy := client.getNoProxy(httpRequest.URL.Scheme)
|
||||
var flag bool
|
||||
for _, value := range noProxy {
|
||||
if strings.HasPrefix(value, "*") {
|
||||
value = fmt.Sprint(".%s", value)
|
||||
}
|
||||
noProxyReg, err := regexp.Compile(value)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if noProxyReg.MatchString(httpRequest.Host) {
|
||||
flag = true
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if trans, ok := client.httpClient.Transport.(*http.Transport); ok && trans != nil {
|
||||
if trans.TLSClientConfig != nil {
|
||||
@ -157,13 +212,95 @@ func (client *Client) DoActionWithSigner(request requests.AcsRequest, response r
|
||||
}
|
||||
}
|
||||
|
||||
if proxy != nil && !flag {
|
||||
trans.Proxy = http.ProxyURL(proxy)
|
||||
}
|
||||
|
||||
client.httpClient.Transport = trans
|
||||
}
|
||||
|
||||
var httpResponse *http.Response
|
||||
|
||||
httpResponse, err = hookDo(client.httpClient.Do)(httpRequest)
|
||||
if err == nil {
|
||||
for key, val := range httpResponse.Header {
|
||||
fmt.Println(key, val)
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (client *Client) buildRequestWithSigner(request requests.AcsRequest, signer auth.Signer) (httpRequest *requests.HttpRequest, err error) {
|
||||
func (client *Client) buildRequestWithSigner(request requests.AcsRequest, signer auth.Signer) (httpRequest *http.Request, err error) {
|
||||
// init param
|
||||
request.SetDomain("")
|
||||
if request.GetScheme() == "" {
|
||||
request.SetScheme(client.config.Scheme)
|
||||
}
|
||||
|
||||
err = requests.InitParam(request)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
// build request
|
||||
err = auth.Sign(request, signer)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
requestMethod := request.GetMethod()
|
||||
requestUrl := request.BuildUrl()
|
||||
body := request.GetBodyReader()
|
||||
httpRequest, err = http.NewRequest(requestMethod, requestUrl, body)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
for key, val := range request.GetHeaders() {
|
||||
httpRequest.Header[key] = []string{val}
|
||||
}
|
||||
|
||||
if host, isContainsHost := request.GetHeaders()["host"]; isContainsHost {
|
||||
httpRequest.Host = host
|
||||
}
|
||||
userAgent := DefaultUserAgent
|
||||
httpRequest.Header.Set("User-Agent", userAgent)
|
||||
return
|
||||
}
|
||||
|
||||
func (client *Client) getHttpProxy(scheme string) (proxy *url.URL, err error) {
|
||||
switch scheme {
|
||||
case "https":
|
||||
if client.GetHttpsProxy() != "" {
|
||||
proxy, err = url.Parse(client.httpsProxy)
|
||||
} else if rawurl := os.Getenv("HTTPS_PROXY"); rawurl != "" {
|
||||
proxy, err = url.Parse(rawurl)
|
||||
} else if rawurl := os.Getenv("https_proxy"); rawurl != "" {
|
||||
proxy, err = url.Parse(rawurl)
|
||||
}
|
||||
default:
|
||||
if client.GetHttpProxy() != "" {
|
||||
proxy, err = url.Parse(client.httpProxy)
|
||||
} else if rawurl := os.Getenv("HTTP_PROXY"); rawurl != "" {
|
||||
proxy, err = url.Parse(rawurl)
|
||||
} else if rawurl := os.Getenv("http_proxy"); rawurl != "" {
|
||||
proxy, err = url.Parse(rawurl)
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (client *Client) getNoProxy(scheme string) []string {
|
||||
var urls []string
|
||||
if client.GetNoProxy() != "" {
|
||||
urls = strings.Split(client.noProxy, ",")
|
||||
} else if rawurl := os.Getenv("NO_PROXY"); rawurl != "" {
|
||||
urls = strings.Split(rawurl, ",")
|
||||
} else if rawurl := os.Getenv("no_proxy"); rawurl != "" {
|
||||
urls = strings.Split(rawurl, ",")
|
||||
}
|
||||
return urls
|
||||
}
|
||||
|
||||
func hookDo(fn func(req *http.Request) (*http.Response, error)) func(req *http.Request) (*http.Response, error) {
|
||||
return fn
|
||||
}
|
||||
|
@ -1,5 +1,7 @@
|
||||
package requests
|
||||
|
||||
import "io"
|
||||
|
||||
type CommonRequest struct {
|
||||
*baseRequest
|
||||
Product string
|
||||
@ -20,3 +22,7 @@ func (request *CommonRequest) BuildUrl() string {
|
||||
func (request *CommonRequest) BuildQueries() string {
|
||||
return request.Ontology.BuildQueries()
|
||||
}
|
||||
|
||||
func (request *CommonRequest) GetBodyReader() io.Reader {
|
||||
return request.Ontology.GetBodyReader()
|
||||
}
|
||||
|
@ -1,5 +1,11 @@
|
||||
package requests
|
||||
|
||||
import (
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/utils"
|
||||
"io"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type HttpRequest struct {
|
||||
*baseRequest
|
||||
}
|
||||
@ -27,3 +33,12 @@ func (request *HttpRequest) InitWithApiInfo(product, version, action string) {
|
||||
request.version = version
|
||||
request.actionName = action
|
||||
}
|
||||
|
||||
func (request *HttpRequest) GetBodyReader() io.Reader {
|
||||
if request.FormParams != nil && len(request.FormParams) > 0 {
|
||||
formString := utils.GetUrlFormedMap(request.FormParams)
|
||||
return strings.NewReader(formString)
|
||||
} else {
|
||||
return strings.NewReader("")
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package requests
|
||||
|
||||
import (
|
||||
"io"
|
||||
"time"
|
||||
)
|
||||
|
||||
@ -47,6 +48,7 @@ type AcsRequest interface {
|
||||
GetScheme() string
|
||||
GetDomain() string
|
||||
GetActionName() string
|
||||
GetHeaders() map[string]string
|
||||
|
||||
BuildUrl() string
|
||||
BuildQueries() string
|
||||
@ -54,6 +56,11 @@ type AcsRequest interface {
|
||||
SetScheme(scheme string)
|
||||
SetDomain(host string)
|
||||
SetStringToSign(stringToSign string)
|
||||
GetBodyReader() io.Reader
|
||||
|
||||
addHeaderParam(key, value string)
|
||||
addQueryParam(key, value string)
|
||||
addFormParam(key, value string)
|
||||
}
|
||||
|
||||
type baseRequest struct {
|
||||
@ -83,6 +90,10 @@ type baseRequest struct {
|
||||
stringToSign string
|
||||
}
|
||||
|
||||
func (request *baseRequest) GetHeaders() map[string]string {
|
||||
return request.Headers
|
||||
}
|
||||
|
||||
func (request *baseRequest) GetActionName() string {
|
||||
return request.actionName
|
||||
}
|
||||
@ -143,6 +154,18 @@ func (request *baseRequest) SetStringToSign(stringToSign string) {
|
||||
request.stringToSign = stringToSign
|
||||
}
|
||||
|
||||
func (request *baseRequest) addHeaderParam(key, val string) {
|
||||
request.Headers[key] = val
|
||||
}
|
||||
|
||||
func (request *baseRequest) addQueryParam(key, val string) {
|
||||
request.QueryParams[key] = val
|
||||
}
|
||||
|
||||
func (request *baseRequest) addFormParam(key, val string) {
|
||||
request.FormParams[key] = val
|
||||
}
|
||||
|
||||
func defaultBaseRequest() (request *baseRequest) {
|
||||
request = &baseRequest{
|
||||
Scheme: "",
|
||||
|
@ -73,3 +73,7 @@ func NewCommonResponse() (response *CommonResponse) {
|
||||
BaseResponse: &BaseResponse{},
|
||||
}
|
||||
}
|
||||
|
||||
func Unmarshal(response AcsResponse, httpResponse *http.Response, format string) {
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user