golang要请求远程网页,可以使用net/http包中的client提供的方法实现。查看了官方网站有一些示例,没有太全面的例子,于是自己整理了一下。
get请求
get请求可以直接http.Get方法,非常简单。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
func httpGet() {
resp,err := http.Get( "http://www.01happy.com/demo/accept.php?id=1" )
if err != nil {
// handle error
}
defer resp.Body.Close()
body,err := ioutil.ReadAll(resp.Body)
if err != nil {
// handle error
}
fmt.Println(string(body)) } |
post请求
一种是使用http.Post方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
func httpPost() {
resp,err := http.Post( "http://www.01happy.com/demo/accept.php" ,
"application/x-www-form-urlencoded" ,
strings.NewReader( "name=cjb" ))
if err != nil {
fmt.Println(err)
}
defer resp.Body.Close()
body,err := ioutil.ReadAll(resp.Body)
if err != nil {
// handle error
}
fmt.Println(string(body)) } |
Tips:使用这个方法的话,第二个参数要设置成”application/x-www-form-urlencoded”,否则post参数无法传递。
一种是使用http.PostForm方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
func httpPostForm() {
resp,err := http.PostForm( "http://www.01happy.com/demo/accept.php" ,
url.Values{ "key" : { "Value" }, "id" : { "123" }})
if err != nil {
// handle error
}
defer resp.Body.Close()
body,err := ioutil.ReadAll(resp.Body)
if err != nil {
// handle error
}
fmt.Println(string(body)) } |
复杂的请求
有时需要在请求的时候设置头参数、cookie之类的数据,就可以使用http.Do方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
func httpDo() {
client := &http.Client{}
req,err := http.NewRequest( "POST" , "http://www.01happy.com/demo/accept.php" ,strings.NewReader( "name=cjb" ))
if err != nil {
// handle error
}
req.Header.Set( "Content-Type" , "application/x-www-form-urlencoded" )
req.Header.Set( "Cookie" , "name=anny" )
resp,err := client.Do(req)
defer resp.Body.Close()
body,err := ioutil.ReadAll(resp.Body)
if err != nil {
// handle error
}
fmt.Println(string(body)) } |
同上面的post请求,必须要设定Content-Type为application/x-www-form-urlencoded,post参数才可正常传递。
如果要发起head请求可以直接使用http client的head方法,比较简单,这里就不再说明。 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|