17 HTTP编程入门
http请求原理
http请求原理我就不多说了,网上一搜就能搜索到,下面我注意是记录下http模块的使用方法
http 模块
HTTP-server hello world
我们使用HandleFunc来把url与处理函数绑定在一块就可以处理http请求了。
// simehttp1
package main
import (
"fmt"
"net/http"
)
func hello(w http.ResponseWriter, r *http.Request) {
fmt.Println("handle hello")
fmt.Fprintf(w, "hello")
}
func main() {
http.HandleFunc("/", hello) // 把url和处理这个url的方法绑定下
err := http.ListenAndServe("0.0.0.0:80", nil) // 启动服务
if err != nil {
fmt.Println("http listen failed")
}
}
HTTP-Client
我们使用http模块来发送一个GET方法的http请求,然后在打印下获取的结果
// httpClient
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
res, err := http.Get("http://www.baidu.com") // 使用GET方法请求数据
if err != nil {
fmt.Println("get err:,", err)
return
}
data, err := ioutil.ReadAll(res.Body) // 读取获取的html body
if err != nil {
fmt.Println("get data err:", err)
return
}
fmt.Println(string(data))
}
HTTP-head
我们可以使用head方法来访问指定的网页
// httpHead
package main
import (
"fmt"
"net/http"
)
var url = []string{
"http://www.baidu.com",
"http://google.com",
}
func main() {
for _, v := range url {
resp, err := http.Head(v) // head方法获取内容
if err != nil {
fmt.Printf("head %s failed,err:", v, err)
continue
}
fmt.Printf("head succ,status:%v\n", resp.Status)
}
}
显然我们访问谷歌的时候因为墙的原因导致访问不了,超时时间比较长,那么我们可以自己定义下超时时间,自己定义的话只需要设置Dial 的超时时间即可,我们设置为2秒
// httpHead
package main
import (
"fmt"
"net"
"net/http"
"time"
)
var url = []string{
"http://www.baidu.com",
"http://google.com",
}
func main() {
for _, v := range url {
c := http.Client{ // 指定http的超时时间,基本上对这个Client结构体赋值。更多详情可以看源码
Transport: &http.Transport{
Dial: func(network, addr string) (net.Conn, error) {
timeout := time.Second * 2 // 这里设置超时时间为2秒
return net.DialTimeout(network, addr, timeout)
},
},
}
resp, err := c.Head(v)
if err != nil {
fmt.Printf("head %s failed,err:", v, err)
continue
}
fmt.Printf("head succ,status:%v\n", resp.Status)
}
}
分类:
GO语言开发
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构