golang GET http、https、代理方式

package utils

import (
    "crypto/tls"
    "encoding/json"
    "io/ioutil"
    "log"
    "net/http"
    "net/url"
    "time"
)

func GET(url string, reply interface{}) (err error) {
    var (
        v        []byte
        response *http.Response
    )

    response, err = http.Get(url)

    if err != nil {
        return
    }

    if response == nil {
        return
    }

    defer response.Body.Close()

    if v, err = ioutil.ReadAll(response.Body); err != nil {
        return
    }

    return json.Unmarshal(v, reply)
}

func HttpsGET(url string, reply interface{}) (err error) {
    var (
        v        []byte
        response *http.Response
    )

    tr := &http.Transport{
        TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
    }
    client := &http.Client{Transport: tr}
    response, err = client.Get(url)

    //response, err = http.Get(url)

    if err != nil {
        return
    }

    if response == nil {
        return
    }

    defer response.Body.Close()

    if v, err = ioutil.ReadAll(response.Body); err != nil {
        return
    }
    log.Printf("[GET]%#v", string(v))

    return json.Unmarshal(v, reply)
}

/*
步骤一:
引入 "crypto/tls" 包

步骤二:
定义TLSClientConfig,忽略证书校验:

tr := &http.Transport{
        TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
    }

步骤三:
修改

client := &http.Client{}

client := &http.Client{Transport: tr}
*/

//使用代理服务的HTTP Get方法
func ProxyGet(proxy func(_ *http.Request) (*url.URL, error), url string) (resp *http.Response, err error) {

    transport := &http.Transport{Proxy: proxy, TLSClientConfig: &tls.Config{InsecureSkipVerify: true}}
    client := &http.Client{Transport: transport,Timeout:3*time.Second}

    return client.Get(url)

}

func ProxyHttpsGet(proxy func(_ *http.Request) (*url.URL, error), url string,reply interface{})(err error)  {
    var (
        v        []byte
        response *http.Response
    )

    tr := &http.Transport{
        Proxy: proxy,
        TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
    }
    client := &http.Client{Transport: tr,Timeout:3*time.Second}
    response, err = client.Get(url)

    //response, err = http.Get(url)

    if err != nil {
        return
    }

    if response == nil {
        return
    }

    defer response.Body.Close()

    if v, err = ioutil.ReadAll(response.Body); err != nil {
        return
    }
    log.Printf("[GET]%#v", string(v))

    return json.Unmarshal(v, reply)
}

首先,Go语言是一种高效的编程语言,适用于并发编程和网络编程。在网络编程中,httpclient是一个常用的工具,它可以发送HTTP请求并接收响应。 在Go语言中获取httpclient有两种方式:一种是使用内置的net/http包,另一种是使用第三方库。 使用内置的net/http包可以轻松地创建httpclient。我们可以通过以下代码创建一个httpclient: ```go func main() { client := &http.Client{} req, err := http.NewRequest("GET", "https://www.example.com", nil) if err != nil { log.Fatal(err) } resp, err := client.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close() } ``` 通过上述代码,我们可以看到,我们使用了http.Client{}来创建httpclient,然后使用http.NewRequest()方法创建一个get请求。请求参数包括请求的方法(GET、POST等)、URL、body等。发送请求后,我们可以使用client.Do()方法获取响应,最后记得关闭响应体。 如果需要更多的控制和配置,我们可以使用http.Transport{}来创建定制的httpclient,例如超时时间、代理等。 此外,我们还可以使用第三方库(如Go Resty或Gentleman)来获取httpclient。这些库提供了一些更方便的API和功能,例如自动管理和维护cookie、使用连接池等。使用这些库可以加快我们的开发速度,但需要学习并掌握它们的API和用法。 总而言之,在Go语言中获取httpclient非常简单,我们可以使用内置的net/http包或第三方库,在开发过程中灵活应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值