基于HTTP协议的网络服务
文章目录
一、HTTP协议的网络服务
HTTP协议是基于TCP/IP协议栈的,并且它也是一个面向普通文本的协议。
只要搞清楚了HTTP请求的报文(报文的头部(header)和主体(body))应该包含的内容,使用任何一个文本编译器,就饿可以编写一个完整的HTTP请求报文。
在这种情况下,直接使用
net.Dial
函数,就可以。
使用net/http
代码包中的程序实体,可以更便捷的访问基于HTTP协议的网络服务。其中最便捷的是使用http.Get
函数。
1.1 使用http.Get
函数访问HTTP协议的网络服务
package main
import (
"fmt"
"net/http"
)
func main() {
url1 := "http://www.google.cn/"
fmt.Printf("Send request to %q with method GET ... \n", url1)
response1, err := http.Get(url1)
if err != nil {
fmt.Printf("request sending error: %v\n", err)
}
defer response1.Body.Close()
line1 := response1.Proto + " " + response1.Status
fmt.Printf("The first line of response: \n %s \n", line1)
}
http.Get
函数会返回两个结果值:
- 第一个结果值的类型是
*http.Response
,它是网络服务给我们传回来的响应内容的结构化表示。 - 第二个结果值是error类型。它代表了在创建和发送HTTP请求,以及接受和解析HTTP响应的过程中可能发生的错误。
在http.Get
函数内部会使用缺省的HTTP客户端,并调用它的Get方法以完成功能。缺省客户端类型是*http.Client
,由公开变量DefaultClient代表。
1.2 使用缺省客户端DefaultClient(类型为*http.Client
)
package main
import (
"fmt"
"net/http"
)
func main() {
url1 := "http://www.google.cn/"
fmt.Printf("Send request to %q with method GET ... \n", url1)
// response1, err := http.Get(url1)
response1, err := http