首页 > 网站 > 帮助中心 > 正文

详解golang中发送http请求的几种常见情况

2024-07-09 22:42:44
字体:
来源:转载
供稿:网友

方式一 使用http.Newrequest

先生成http.client -> 再生成 http.request -> 之后提交请求:client.Do(request) -> 处理返回结果,每一步的过程都可以设置一些具体的参数,下面是一个最朴素最基本的例子:

//question ???将stdout重定向为response信息???package mainimport (  "fmt"  "io"  "net/http"  "os")func main() {  //生成client 参数为默认  client := &http.Client{}    //生成要访问的url  url := "http://www.baidu.com"      //提交请求  reqest, err := http.NewRequest("GET", url, nil)    if err != nil {    panic(err)  }    //处理返回结果  response, _ := client.Do(reqest)    //将结果定位到标准输出 也可以直接打印出来 或者定位到其他地方进行相应的处理  stdout := os.Stdout  _, err = io.Copy(stdout, response.Body)    //返回的状态码  status := response.StatusCode  fmt.Println(status)}

方式二 先生成client,之后用client.get/post..

client结构自己也有一些发送api的方法,比如client.get,client.post,client.postform..等等。基本上涵盖了主要的http请求的类型,通常不进行什么特殊的配置的话,这样就可以了,其实client的get或者post方法,也是对http.Newerequest方法的封装,里面还额外添加了req.Header.Set("Content-Type", bodyType)一般用的话,也是ok的

方式三 http. Get/Post..

具体实现的时候,还是采用的先前提到的模式,先生成一个默认的client,之后调用http.Newrequest方法。

对每个步骤进行细节性的说明

生成client时候的参数配置

最常见的一个参数是使用https的方式发送信息时候client端的设置。如果生成client的时候,什么信息都不添加,就会使用默认的值。具体的信息包括:

Transport RoundTripper CheckRedirect func(req *Request, via []*Request) error     Jar CookieJar     Timeout time.Duration

第一个参数是一个RoundTripper接口,里面包含了一个RoundTrip函数,指定了一些http请求的基本机制。http.Transport中涉及到的参数较多,要是不指定的话,就会使用默认的DefaultTransport参数,里面包含一些默认的请求时间以及proxy机制之类的。具体的细节参数涉及到好多,有的都没有使用到过比如那些我握手时间之类的,目前使用到的最多的就是https的相关参数:TLSClientConfig,这是一个*tls.Config类型,其中涉及到的参数还是有很多,一个基本的是用案例如下,仅仅是在配置中制定了rooca以及客户度端使用的证书。相关的https的内容可以参考之前的这一篇

通常发送https请求的时候,前面的参数可以使用如下方式进行处理:

  pool := x509.NewCertPool()  caCertPath := "certs/cert_server/ca.crt"  caCrt, err := ioutil.ReadFile(caCertPath)  if err != nil {    fmt.Println("ReadFile err:", err)    return  }  pool.AppendCertsFromPEM(caCrt)  cliCrt, err := tls.LoadX509KeyPair("certs/cert_server/client.crt", "certs/cert_server/client.key")  if err != nil {    fmt.Println("Loadx509keypair err:", err)    return  }    tr := &http.Transport{    TLSClientConfig: &tls.Config{      RootCAs:   pool,      Certificates: []tls.Certificate{cliCrt},    },  }  client := &http.Client{Transport: tr}

生成request时候的参数配置

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表