get请求可以直接http.Get方法,非常简单。
Tips:使用这个方法的话,第二个参数要设置成”application/x-www-form-urlencoded”,否则post参数无法传递。
有时需要在请求的时候设置头参数、cookie之类的数据,就可以使用http.Do方法。
同上面的post请求,必须要设定Content-Type为application/x-www-form-urlencoded,post参数才可正常传递。
如果要发起head请求可以直接使用httpclient的head方法,比较简单,这里就不再说明。
用golang进行http请求类型多了,总结备忘一下。
1.普通的post\get请求
varrhttp.Request r.ParseForm() r.Form.Add("uuid",orderUUID) bodystr:=strings.TrimSpace(r.Form.Encode()) request,err:=http.NewRequest("GET",url,strings.NewReader(bodystr)) iferr!=nil{ //TODO: } request.Header.Set("Content-Type","application/x-www-form-urlencoded") request.Header.Set("Connection","Keep-Alive") varresp*http.Response resp,err=http.DefaultClient.Do(request) iferr!=nil{ //TODO: }2.body全部二进制数据流进行post
//body提交二进制数据 funcDoBytesPost(urlstring,data[]byte)([]byte,error){ body:=bytes.NewReader(data) request,err:=http.NewRequest(POST_METHOD,url,body) iferr!=nil{ log.Println("http.NewRequest,[err=%s][url=%s]",err,url) return[]byte(""),err } request.Header.Set("Connection","Keep-Alive") varresp*http.Response resp,err=http.DefaultClient.Do(request) iferr!=nil{ log.Println("http.Dofailed,[err=%s][url=%s]",err,url) return[]byte(""),err } deferresp.Body.Close() b,err:=ioutil.ReadAll(resp.Body) iferr!=nil{ log.Println("http.Dofailed,[err=%s][url=%s]",err,url) } returnb,err }3.模拟web表单文件上传进行post
funcnewfileUploadRequest(uristring,paramsmap[string]string,paramName,pathstring)(*http.Request,error){ file,err:=os.Open(path) iferr!=nil{ returnnil,err } deferfile.Close() body:=&bytes.Buffer{} writer:=multipart.NewWriter(body) part,err:=writer.CreateFormFile(paramName,path) iferr!=nil{ returnnil,err } _,err=io.Copy(part,file) forkey,val:=rangeparams{ _=writer.WriteField(key,val) } err=writer.Close() iferr!=nil{ returnnil,err } request,err:=http.NewRequest("POST",uri,body) request.Header.Set("Content-Type",writer.FormDataContentType()) returnrequest,err }本文内容总结:get请求,post请求,一种是使用http.Post方式,一种是使用http.PostForm方法,复杂的请求,
原文链接:https://www.cnblogs.com/mafeng/p/7068837.html