杰克工作室 发表于 2023-2-28 21:21

golang 原生发送GET和POST示例

<h4>GET请求</h4>
get请求可以直接使用http.Get方法

<h5>简单</h5>

<pre>
func&nbsp;main(){
    resp,&nbsp;err&nbsp;:=&nbsp;http.Get(&quot;https://baidu.com&quot;)
&nbsp;&nbsp;if&nbsp;err&nbsp;!=&nbsp;nil&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;panic(err)
&nbsp;&nbsp;}
&nbsp;&nbsp;defer&nbsp;resp.Body.Close()
&nbsp;&nbsp;s,err:=ioutil.ReadAll(resp.Body)
&nbsp;&nbsp;fmt.Printf(string(s))
}</pre>

<h5>复杂</h5>

<pre>
func&nbsp;main()&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;params&nbsp;:=&nbsp;url.Values{}
&nbsp;&nbsp;&nbsp;&nbsp;Url,&nbsp;err&nbsp;:=&nbsp;url.Parse(&quot;http://baidu.com?fd=fdsf&quot;)
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;err&nbsp;!=&nbsp;nil&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;panic(err.Error())
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;params.Set(&quot;a&quot;,&nbsp;&quot;fdfds&quot;)
&nbsp;&nbsp;&nbsp;&nbsp;params.Set(&quot;id&quot;,&nbsp;string(&quot;1&quot;))&nbsp;&nbsp;&nbsp;&nbsp;//如果参数中有中文参数,这个方法会进行URLEncode
&nbsp;&nbsp;&nbsp;&nbsp;Url.RawQuery&nbsp;=&nbsp;params.Encode()
&nbsp;&nbsp;&nbsp;&nbsp;urlPath&nbsp;:=&nbsp;Url.String()
&nbsp;&nbsp;&nbsp;&nbsp;resp,&nbsp;err&nbsp;:=&nbsp;http.Get(urlPath)
&nbsp;&nbsp;&nbsp;&nbsp;defer&nbsp;resp.Body.Close()
&nbsp;&nbsp;&nbsp;&nbsp;s,&nbsp;err&nbsp;:=&nbsp;ioutil.ReadAll(resp.Body)
&nbsp;&nbsp;&nbsp;&nbsp;fmt.Println(string(s))
}</pre>

<p>这个params.set是不是感觉跟php里的http_build_query,自己感觉哈</p>

<h4>POST&nbsp;请求</h4>
使用http.post

<pre>
type&nbsp;Server&nbsp;struct&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;ServerName&nbsp;string
&nbsp;&nbsp;&nbsp;&nbsp;ServerIp&nbsp;&nbsp;&nbsp;string
}
type&nbsp;ServerSlice&nbsp;struct&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;Server&nbsp;&nbsp;&nbsp;&nbsp;[]Server
&nbsp;&nbsp;&nbsp;&nbsp;ServersID&nbsp;string
}
func&nbsp;main()&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;//post&nbsp;第三个参数是io.reader&nbsp;interface
&nbsp;&nbsp;&nbsp;&nbsp;//strings.NewReader&nbsp;&nbsp;byte.NewReader&nbsp;bytes.NewBuffer&nbsp;&nbsp;实现了read&nbsp;方法
&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;:=&nbsp;ServerSlice{ServersID:&nbsp;&quot;tearm&quot;,&nbsp;Server:&nbsp;[]Server{{&quot;beijing&quot;,&nbsp;&quot;127.0.0.1&quot;},&nbsp;{&quot;shanghai&quot;,&nbsp;&quot;127.0.0.1&quot;}}}
&nbsp;&nbsp;&nbsp;&nbsp;b,&nbsp;_&nbsp;:=&nbsp;json.Marshal(s)
&nbsp;&nbsp;&nbsp;&nbsp;fmt.Println(string(b))
&nbsp;&nbsp;&nbsp;&nbsp;resp,&nbsp;_&nbsp;:=&nbsp;http.Post(&quot;http://baidu.com&quot;,&nbsp;&quot;application/x-www-form-urlencoded&quot;,&nbsp;strings.NewReader(&quot;heel=&quot;+string(b)))
&nbsp;&nbsp;&nbsp;&nbsp;defer&nbsp;resp.Body.Close()&nbsp;&nbsp;&nbsp;&nbsp;//io.Reader
&nbsp;&nbsp;&nbsp;&nbsp;body,&nbsp;_&nbsp;:=&nbsp;ioutil.ReadAll(resp.Body)
&nbsp;&nbsp;&nbsp;&nbsp;fmt.Println(string(body))</pre>
使用http.PostForm

<pre>
func&nbsp;httpPostForm()&nbsp;{
   //&nbsp;params:=url.Values{}
   //&nbsp;params.Set(&quot;hello&quot;,&quot;fdsfs&quot;)&nbsp;&nbsp;//这两种都可以
&nbsp;&nbsp;&nbsp;params=&nbsp;url.Values{&quot;key&quot;:&nbsp;{&quot;Value&quot;},&nbsp;&quot;id&quot;:&nbsp;{&quot;123&quot;}}
&nbsp;&nbsp;&nbsp;resp,&nbsp;_:=&nbsp;http.PostForm(&quot;http://baidu.com&quot;,&nbsp;params)
&nbsp;
&nbsp;&nbsp;&nbsp;defer&nbsp;resp.Body.Close()
&nbsp;&nbsp;&nbsp;body,&nbsp;_:=&nbsp;ioutil.ReadAll(resp.Body)
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;fmt.Println(string(body))
}</pre>

<p>如果需要设置头参数,cookie之类的数据,就可以使用http.Do</p>

<pre>
func&nbsp;httpDo()&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;client&nbsp;:=&nbsp;&amp;http.Client{}

&nbsp;&nbsp;&nbsp;&nbsp;req,&nbsp;err&nbsp;:=&nbsp;http.NewRequest(&quot;POST&quot;,&nbsp;&quot;baidu.com&quot;,&nbsp;strings.NewReader(&quot;name=cjb&quot;))
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;err&nbsp;!=&nbsp;nil&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;handle&nbsp;error
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;req.Header.Set(&quot;Content-Type&quot;,&nbsp;&quot;application/x-www-form-urlencoded&quot;)
&nbsp;&nbsp;&nbsp;&nbsp;req.Header.Set(&quot;Cookie&quot;,&nbsp;&quot;name=anny&quot;)

&nbsp;&nbsp;&nbsp;&nbsp;resp,&nbsp;err&nbsp;:=&nbsp;client.Do(req)

&nbsp;&nbsp;&nbsp;&nbsp;defer&nbsp;resp.Body.Close()&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;body,&nbsp;err&nbsp;:=&nbsp;ioutil.ReadAll(resp.Body)
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;err&nbsp;!=&nbsp;nil&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;handle&nbsp;error
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;fmt.Println(string(body))
}</pre>

<p>同样的http.NewRequest第三个参数只需要实现io.reader接口就行.<br />
<br />
参照:https://www.cnblogs.com/zhaoyingjie/p/16145453.html</p>
页: [1]
查看完整版本: golang 原生发送GET和POST示例