go http请求库HttpRequest
目录
安装
go get https://github.com/kirinlabs/HttpRequest
发送请求
导入HttpRequest
1 | import "github.com/kirinlabs/HttpRequest" |
实例化
1 | req := HttpRequest.NewRequest() |
Get请求
然后,尝试获取某个网页。我们来获取 Github 的公共时间线
返回一个res的Response对象和err的Error对象
1 | res,err := req.Get( "https://api.github.com/events" ) |
Post 请求
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | //无参请求 res,err := req.Post( "https://www.baidu.com" ) //请求体为文本 res,err := req.Post( "https://www.baidu.com" , "hello" ) //请求体为Json字符串 res,err := req.Post( "https://www.baidu.com" , "{\"name\":\"github\"}" ) //map传参 res.err := req.Post( "https://www.baidu.com" , map [string] interface {}{ "name" : "github" , "type" :1, }) |
也可以不用实例化,直接发送请求
快速发送Get请求
1 2 3 | res,err := HttpRequest.Get( "https://www.baidu.com" ) res,err := HttpRequest.Get( "https://www.baidu.com" , "title=baidu" ) |
快速发送Post请求
1 2 3 4 5 6 7 | res,err := HttpRequest.Post( "https://www.baidu.com" ) res,err := HttpRequest.Post( "https://www.baidu.com" , "title=baidu&type=pdf" ) res,err := HttpRequest.Post( "https://www.baidu.com" , map [string] interface {}{ "title" : "baidu" , }) |
快速发送JSON请求
1 2 3 4 5 | res,err := HttpRequest.JSON().Post( "https://www.baidu.com" , map [string] interface {}{ "title" : "baidu" , }) res,err := HttpRequest.JSON().Post( "https://www.baidu.com" ,`{ "title" : "baidu" , "type" : "pdf" }`) |
传递URL参数
你想为URL的查询字符串(query string)传递数据。如:手工构建URL,http://www.baidu.com/index?key=value。HttpRequest允许你使用第2个参数以字符串"id=100&name=github"或map[string]interface{}{"id":10,"name":"github"}字典的形式把数据传递给URL:
手工传参
1 | res,err := req.Get( "https://www.baidu.com/index?name=github" ) |
字符串传参
1 | res,err := req.Get( "https://www.baidu.com/index?name=github" , "id=100&type=1" ) |
map传参
1 2 3 4 | res,err := req.Get( "https://www.baidu.com/index?name=github" , map [string] interface {}{ "id" :10, "type" :1, }) |
响应内容
能读取服务器响应的内容
1 | res,err := req.Post( "https://api.github.com/events" ) |
获取服务器返回的内容
1 2 3 | body,err := res.Body() fmt.Println(string(body)) |
获取服务器响应状态码
1 | res.StatusCode() |
获取服务器响应Headers
1 | res.Headers() |
返回一个map[string]string的字典
获取请求响应时间
1 | res.Time() |
Json响应内容
HttpRequest内置JSON解码,来解析JSON数据
1 2 3 4 | //Format the json return value body, err := res.Json() fmt.Println(body) |
如果JSON解码失败,会返回一个err错误
定制请求头
如果想为请求添加HTTP头部信息,只需要简单的传一个map给SetHeaders方法
1 2 3 4 | req.SetHeaders( map [string]string{ "Content-Type" : "application/json" , "Source" : "api" , }) |
注:所有header值必须是字符串,SetHeaders可以多次调用,如果Key重复则会覆盖前面设置的值
BasicAuth 认证
如果想为请求添加HTTP头部信息,只需要简单的传一个map给SetHeaders方法
1 | req.SetBasicAuth( "username" , "password" ) |
JSON请求
如果想以json方式发送请求,HttpRequest支持2种方式
设置Header头部信息
1 2 3 | req.SetHeaders( map [string]string{ "Content-Type" : "application/json" }) req.Post( "https://www.baidu.com" , "{\"name\":\"github\"}" ) |
调用req.JSON()内置方法
1 2 3 4 5 6 7 | //直接发磅Json字符串参数 res,err := req.JSON().Post( "https://www.baidu.com" , "{\"name\":\"github\"}" ) //自动将Map以Json方式发送参数 res,err := req.JSON().Post( "https://www.baidu.com" , map [string] interface {}{ "name" : "github" }) |
Cookie
1 2 3 | req.SetCookies( map [string]string{ "name" : "jason" }) |
超时
1 | req.SetTimeout(5) |
关闭证书验证
当请求https协议时提示x509: certificate signed by unknown authority时,可关闭证书验证
1 | req.SetTLSClient(&tls.Config{InsecureSkipVerify: true}) |
调试模式
1 | req.Debug(true) |
连接操作
而且还支持连接操作
1 | req := HttpRequest.NewRequest().Debug(true).SetTimeout(5).SetHeader() |
Respone对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 获取返回的Response对象 resp.Response() 获取返回码 resp.StatusCode() 获取Body主体信息 resp.Body() 获取请求耗时 resp.Time() string 单位是毫秒 获取真实Url res.Url() |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2019-02-22 Django之Models(一)