httplib support set transport and proxy
This commit is contained in:
		
							parent
							
								
									b310be1fcf
								
							
						
					
					
						commit
						8bf0e67b79
					
				| @ -24,7 +24,7 @@ func Get(url string) *BeegoHttpRequest { | |||||||
| 	req.Method = "GET" | 	req.Method = "GET" | ||||||
| 	req.Header = http.Header{} | 	req.Header = http.Header{} | ||||||
| 	req.Header.Set("User-Agent", defaultUserAgent) | 	req.Header.Set("User-Agent", defaultUserAgent) | ||||||
| 	return &BeegoHttpRequest{url, &req, map[string]string{}, false, 60 * time.Second, 60 * time.Second, nil} | 	return &BeegoHttpRequest{url, &req, map[string]string{}, false, 60 * time.Second, 60 * time.Second, nil, nil, nil} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Post returns *BeegoHttpRequest with POST method. | // Post returns *BeegoHttpRequest with POST method. | ||||||
| @ -33,7 +33,7 @@ func Post(url string) *BeegoHttpRequest { | |||||||
| 	req.Method = "POST" | 	req.Method = "POST" | ||||||
| 	req.Header = http.Header{} | 	req.Header = http.Header{} | ||||||
| 	req.Header.Set("User-Agent", defaultUserAgent) | 	req.Header.Set("User-Agent", defaultUserAgent) | ||||||
| 	return &BeegoHttpRequest{url, &req, map[string]string{}, false, 60 * time.Second, 60 * time.Second, nil} | 	return &BeegoHttpRequest{url, &req, map[string]string{}, false, 60 * time.Second, 60 * time.Second, nil, nil, nil} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Put returns *BeegoHttpRequest with PUT method. | // Put returns *BeegoHttpRequest with PUT method. | ||||||
| @ -42,7 +42,7 @@ func Put(url string) *BeegoHttpRequest { | |||||||
| 	req.Method = "PUT" | 	req.Method = "PUT" | ||||||
| 	req.Header = http.Header{} | 	req.Header = http.Header{} | ||||||
| 	req.Header.Set("User-Agent", defaultUserAgent) | 	req.Header.Set("User-Agent", defaultUserAgent) | ||||||
| 	return &BeegoHttpRequest{url, &req, map[string]string{}, false, 60 * time.Second, 60 * time.Second, nil} | 	return &BeegoHttpRequest{url, &req, map[string]string{}, false, 60 * time.Second, 60 * time.Second, nil, nil, nil} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Delete returns *BeegoHttpRequest DELETE GET method. | // Delete returns *BeegoHttpRequest DELETE GET method. | ||||||
| @ -51,7 +51,7 @@ func Delete(url string) *BeegoHttpRequest { | |||||||
| 	req.Method = "DELETE" | 	req.Method = "DELETE" | ||||||
| 	req.Header = http.Header{} | 	req.Header = http.Header{} | ||||||
| 	req.Header.Set("User-Agent", defaultUserAgent) | 	req.Header.Set("User-Agent", defaultUserAgent) | ||||||
| 	return &BeegoHttpRequest{url, &req, map[string]string{}, false, 60 * time.Second, 60 * time.Second, nil} | 	return &BeegoHttpRequest{url, &req, map[string]string{}, false, 60 * time.Second, 60 * time.Second, nil, nil, nil} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Head returns *BeegoHttpRequest with HEAD method. | // Head returns *BeegoHttpRequest with HEAD method. | ||||||
| @ -60,7 +60,7 @@ func Head(url string) *BeegoHttpRequest { | |||||||
| 	req.Method = "HEAD" | 	req.Method = "HEAD" | ||||||
| 	req.Header = http.Header{} | 	req.Header = http.Header{} | ||||||
| 	req.Header.Set("User-Agent", defaultUserAgent) | 	req.Header.Set("User-Agent", defaultUserAgent) | ||||||
| 	return &BeegoHttpRequest{url, &req, map[string]string{}, false, 60 * time.Second, 60 * time.Second, nil} | 	return &BeegoHttpRequest{url, &req, map[string]string{}, false, 60 * time.Second, 60 * time.Second, nil, nil, nil} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // BeegoHttpRequest provides more useful methods for requesting one url than http.Request. | // BeegoHttpRequest provides more useful methods for requesting one url than http.Request. | ||||||
| @ -72,6 +72,8 @@ type BeegoHttpRequest struct { | |||||||
| 	connectTimeout   time.Duration | 	connectTimeout   time.Duration | ||||||
| 	readWriteTimeout time.Duration | 	readWriteTimeout time.Duration | ||||||
| 	tlsClientConfig  *tls.Config | 	tlsClientConfig  *tls.Config | ||||||
|  | 	proxy            func(*http.Request) (*url.URL, error) | ||||||
|  | 	transport        http.RoundTripper | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Debug sets show debug or not when executing request. | // Debug sets show debug or not when executing request. | ||||||
| @ -105,6 +107,24 @@ func (b *BeegoHttpRequest) SetCookie(cookie *http.Cookie) *BeegoHttpRequest { | |||||||
| 	return b | 	return b | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // Set transport to | ||||||
|  | func (b *BeegoHttpRequest) SetTransport(transport http.RoundTripper) *BeegoHttpRequest { | ||||||
|  | 	b.transport = transport | ||||||
|  | 	return b | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // Set http proxy | ||||||
|  | // example: | ||||||
|  | // | ||||||
|  | //	func(req *http.Request) (*url.URL, error) { | ||||||
|  | // 		u, _ := url.ParseRequestURI("http://127.0.0.1:8118") | ||||||
|  | // 		return u, nil | ||||||
|  | // 	} | ||||||
|  | func (b *BeegoHttpRequest) SetProxy(proxy func(*http.Request) (*url.URL, error)) *BeegoHttpRequest { | ||||||
|  | 	b.proxy = proxy | ||||||
|  | 	return b | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // Param adds query param in to request. | // Param adds query param in to request. | ||||||
| // params build query string as ?key1=value1&key2=value2... | // params build query string as ?key1=value1&key2=value2... | ||||||
| func (b *BeegoHttpRequest) Param(key, value string) *BeegoHttpRequest { | func (b *BeegoHttpRequest) Param(key, value string) *BeegoHttpRequest { | ||||||
| @ -171,12 +191,34 @@ func (b *BeegoHttpRequest) getResponse() (*http.Response, error) { | |||||||
| 		println(string(dump)) | 		println(string(dump)) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	client := &http.Client{ | 	trans := b.transport | ||||||
| 		Transport: &http.Transport{ | 
 | ||||||
|  | 	if trans == nil { | ||||||
|  | 		// create default transport | ||||||
|  | 		trans = &http.Transport{ | ||||||
| 			TLSClientConfig: b.tlsClientConfig, | 			TLSClientConfig: b.tlsClientConfig, | ||||||
|  | 			Proxy:           b.proxy, | ||||||
| 			Dial:            TimeoutDialer(b.connectTimeout, b.readWriteTimeout), | 			Dial:            TimeoutDialer(b.connectTimeout, b.readWriteTimeout), | ||||||
| 		}, |  | ||||||
| 		} | 		} | ||||||
|  | 	} else { | ||||||
|  | 		// if b.transport is *http.Transport then set the settings. | ||||||
|  | 		if t, ok := trans.(*http.Transport); ok { | ||||||
|  | 			if t.TLSClientConfig == nil { | ||||||
|  | 				t.TLSClientConfig = b.tlsClientConfig | ||||||
|  | 			} | ||||||
|  | 			if t.Proxy == nil { | ||||||
|  | 				t.Proxy = b.proxy | ||||||
|  | 			} | ||||||
|  | 			if t.Dial == nil { | ||||||
|  | 				t.Dial = TimeoutDialer(b.connectTimeout, b.readWriteTimeout) | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	client := &http.Client{ | ||||||
|  | 		Transport: trans, | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	resp, err := client.Do(b.req) | 	resp, err := client.Do(b.req) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user