NewTransport transportNetwork 网络类型 tcp tcp4 tcp6 localAddr 指定网卡出口
(transportNetwork, localAddrStr string, secureSkipVerify bool, proxyType, proxyUrl, user, passwd string)
| 117 | // transportNetwork 网络类型 tcp tcp4 tcp6 |
| 118 | // localAddr 指定网卡出口 |
| 119 | func NewTransport(transportNetwork, |
| 120 | localAddrStr string, |
| 121 | secureSkipVerify bool, |
| 122 | proxyType, |
| 123 | proxyUrl, |
| 124 | user, |
| 125 | passwd string) (*http.Transport, error) { |
| 126 | var transport *http.Transport |
| 127 | proxyType = strings.ToLower(proxyType) |
| 128 | ti := transportIt{ |
| 129 | Network: transportNetwork, |
| 130 | LocalAddr: localAddrStr, |
| 131 | ProxyType: proxyType, |
| 132 | ProxyUrl: proxyUrl, |
| 133 | User: user, |
| 134 | Passwd: passwd, |
| 135 | SecureSkipVerify: secureSkipVerify} |
| 136 | |
| 137 | globalTransportMapMutex.Lock() |
| 138 | defer globalTransportMapMutex.Unlock() |
| 139 | |
| 140 | tr, ok := globalTransportMap[ti.String()] |
| 141 | if ok { |
| 142 | //log.Printf("map[%s]已存在", ti.String()) |
| 143 | return tr, nil |
| 144 | } |
| 145 | //log.Printf("map[%s]未存在", ti.String()) |
| 146 | |
| 147 | switch proxyType { |
| 148 | case "http", "https": |
| 149 | { |
| 150 | //log.Printf("http proxy Transport network:%s", transportNetwork) |
| 151 | if !strings.Contains(proxyUrl, "http") { |
| 152 | proxyUrl = fmt.Sprintf("%s://%s", proxyType, proxyUrl) |
| 153 | } |
| 154 | urlProxy, err := url.Parse(proxyUrl) |
| 155 | if err != nil { |
| 156 | return nil, fmt.Errorf("NewTransport=>proxy url.Parse error:%s", err.Error()) |
| 157 | } |
| 158 | |
| 159 | if user != "" && passwd != "" { |
| 160 | urlProxy.User = url.UserPassword(user, passwd) |
| 161 | } |
| 162 | |
| 163 | var localAddr net.Addr |
| 164 | localAddr = nil |
| 165 | |
| 166 | if localAddrStr != "" { |
| 167 | lAddr, err := net.ResolveTCPAddr(transportNetwork, localAddrStr+":0") |
| 168 | if err != nil { |
| 169 | return nil, fmt.Errorf("NewTransport=> ResolveTCPAddr localAddr:%s error:%s", localAddrStr, err.Error()) |
| 170 | } |
| 171 | localAddr = lAddr |
| 172 | } |
| 173 | |
| 174 | dialer := (&net.Dialer{ |
| 175 | Timeout: 30 * time.Second, |
| 176 | KeepAlive: 30 * time.Second, |
no test coverage detected