1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > go http.Get请求 http.Post请求 http.PostForm请求 Client 超时设置

go http.Get请求 http.Post请求 http.PostForm请求 Client 超时设置

时间:2020-05-28 21:39:19

相关推荐

go http.Get请求 http.Post请求 http.PostForm请求 Client  超时设置

http中有Get/Post/PostForm方法

也可以通过http包中设置client 请求配置 ,然后通过client.Do方法实现请求

下demo中功能都实现,其中有详细说明:

package mainimport ("log""net/http" //http 请求用"io" // io.Copy获取http请求状态用;HttpPost"os" // os.Stdout 取io.Copy 返回数据中的status;HttpPost用"io/ioutil" //处理http获取的数据转换用"strings" //HttpPost2中生成Post数据用"net/url" //HttpPost3中定义url.Values中使用到"time" //设置超时用"net")var my_url = "http://c-" //全局变量链接func main(){//HttpGet() HttpPost()//HttpPost2()//HttpPost3()}//net/http包中提供了Get/Head/Post/PostForm函数来发出http/https请求//通过get获取来http请求func HttpGet(){response,err := http.Get(my_url)if err!= nil { //如果访问不成功,url不存在则会进入改判断 log.Println(err)return}defer response.Body.Close() //请求完了关闭回复主体body,err := ioutil.ReadAll(response.Body)log.Println(string(body))}//生成client 通过client的Do方法执行func HttpPost(){/*生成client,参数默认;* 这个结构体有四个属性* Transport(RoundTrepper);指定执行的独立、单次http请求的机制* CheckRedirect(func(req *Request, via []*Request)err):指定处理重定向的策略,如果不为nil,客户端在执行重定向之前调用本函数字段.如果CheckRedirect 返回一个错误,本类型中的get方法不会发送请求,如果CheckRedirect为nil,就会采用默认策略:连续请求10次后停止;* jar(CookieJar):jar指定cookie管理器,若果为nil请求中不会发送cookie,回复中的cookie会被忽略* TimeOut(time.Duration):指定本类型请求的时间限制,为0表示不设置超时*///client := &http.Client{} 这里初始化了一个默认的client,并没有配置一些请求的设置//可以通过client中transport的Dail函数,在自定义Dail函数里面设置建立连接超时时长和发送接受数据超时client := &http.Client{Transport: &http.Transport{Dial: func(netw, addr string) (net.Conn, error) {conn, err := net.DialTimeout(netw, addr, time.Second*2) //设置建立连接超时if err != nil {return nil, err}conn.SetDeadline(time.Now().Add(time.Second * 2)) //设置发送接受数据超时return conn, nil},ResponseHeaderTimeout: time.Second * 2,},}reqest,err := http.NewRequest("POST",my_url,strings.NewReader("name=PostName")) //提交请求;用指定的方法,网址,可选的主体放回一个新的*Requestreqest.Header.Set("Content-Type","application/x-www-form-urlencoded")if err != nil {panic(err)return}response,err := client.Do(reqest) //前面预处理一些参数,状态,Do执行发送;处理返回结果;Do:发送请求, defer response.Body.Close()stdout := os.Stdout //将结果定位到标准输出,也可以直接打印出来,或定位到其他地方进行相应处理_,err = io.Copy(stdout,response.Body) //将第二个参数拷贝到第一个参数,直到第二参数到达EOF或发生错误,返回拷贝的字节喝遇到的第一个错误.status := response.StatusCode //获取返回状态码,正常是200body,err := ioutil.ReadAll(response.Body)log.Println(string(body))log.Println(status)}//HTTP 包中POST 方法func HttpPost2(){//HTTP POST请求req,err := http.Post(my_url,"application/x-www-form-urlencoded",strings.NewReader("name=myname"))//这里定义链接和post的数据if err != nil {log.Println(err.Error())return}defer req.Body.Close()body,err := ioutil.ReadAll(req.Body)if err != nil {log.Println(err.Error())return}log.Println(string(body))}//使用HTTP包中PostForm方法;func HttpPost3(){req,err := http.PostForm(my_url,url.Values{"key":{"value"},"id":{"123"}})if err != nil {log.Println(err.Error())return}defer req.Body.Close()body,err := ioutil.ReadAll(req.Body)if err != nil {log.Println(err.Error())}log.Println(string(body))}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。