背景
在日常工作中经常需要写一写小工具,比如发送get请求,post请求等,在用python时request包比较方便,在用go时可以使用gorequest包,借鉴了py的request包
使用样例
GET请求-client
| func getRequest(params map[string]string) (string, error) { |
| request := gorequest.New() |
| response, body, errs := request.Get("http://127.0.0.1:8866/get"). |
| |
| Param("username", params["username"]). |
| Param("password", params["password"]). |
| End() |
| |
| if errs != nil { |
| fmt.Println(errs) |
| return "", errs[0] |
| } |
| |
| if response.StatusCode != 200 { |
| fmt.Println("服务端返回状态码非200,状态码:", response.StatusCode) |
| return body, nil |
| } |
| |
| return body, nil |
| } |
POST请求-client (form表单)
| |
| func postRequestForm(url string, data map[string]any) (string, error) { |
| request := gorequest.New() |
| response, body, errs := request.Post(url). |
| |
| Set("Content-Type", "application/x-www-form-urlencoded"). |
| SendMap(data). |
| End() |
| |
| if len(errs) > 0 { |
| fmt.Println(errs) |
| return "", errs[0] |
| } |
| |
| fmt.Println(response.StatusCode) |
| fmt.Println(body) |
| if response.StatusCode != 200 { |
| fmt.Println("服务端返回状态码非200,状态码:", response.StatusCode) |
| return body, nil |
| } |
| |
| return body, nil |
| } |
POST请求-client (传输json格式)
| |
| func postRequestJson(url, json string) error { |
| if len(url) == 0 { |
| return errors.New("url为空") |
| } |
| if len(json) == 0 { |
| return errors.New("json数据不能为空") |
| } |
| if !isJson(json) { |
| return errors.New("当前行文本不是json格式,跳过") |
| } |
| |
| request := gorequest.New() |
| response, body, errs := request.Post(url). |
| |
| Set("Content-Type", "application/json"). |
| SendString(json). |
| End() |
| |
| if len(errs) > 0 { |
| fmt.Println(errs) |
| return errs[0] |
| } |
| |
| fmt.Println(response.StatusCode) |
| fmt.Println(body) |
| if response.StatusCode != 200 { |
| fmt.Println("服务端返回状态码非200,状态码:", response.StatusCode) |
| return body, nil |
| } |
| |
| return nil |
| } |
| |
| |
| func isJson(str string) bool { |
| var js map[string]any |
| return json.Unmarshal([]byte(str), &js) == nil |
| } |
POST请求-client (上传文件)
| |
| func postRequestFile() (string, error){ |
| f, _ := filepath.Abs("/etc/hosts") |
| bytesOfFile, _ := ioutil.ReadFile(f) |
| |
| request := gorequest.New() |
| response, body, errors := request.Post("http://127.0.0.1:5000/file"). |
| Type("multipart"). |
| |
| SendFile("./abc.txt"). |
| SendFile(bytesOfFile, "hosts", "file"). |
| End() |
| |
| if errors != nil { |
| fmt.Println(errs) |
| return "", errs[0] |
| } |
| |
| fmt.Println(response.StatusCode) |
| fmt.Println(body) |
| if response.StatusCode != 200 { |
| fmt.Println("服务端返回状态码非200,状态码:", response.StatusCode) |
| return body, nil |
| } |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具