Go Lang语言GET与POST的几种请求方式

news/2024/9/19 12:58:37/文章来源:https://www.cnblogs.com/codtina/p/18418119
/**golang几种post请求方式*参考:https://www.cnblogs.com/mafeng/p/7068837.html
*/package mainimport ("fmt""io/ioutil""log""net/http""net/url""regexp""strings"
)func main() {http_get("http://www.01happy.com/demo/accept.php?id=1")                   //http.Get的方式请求http_post("http://www.01happy.com/demo/accept.php", "name=cjb&id=100")    //http.post的方式请求http_PostForm("http://www.01happy.com/demo/accept.php")                   //http.PostForm方法http_do_get("http://www.01happy.com/demo/accept.php?id=1")                //http.do方法的GET方式进行请求http_do_post("http://www.01happy.com/demo/accept.php", "name=cjb&id=100") //http.do方法的POST方式进行请求http_do_get_proxy("https://2021.ip138.com/")                              //代理访问
}/** 1. http.Get的方式请求*/
func http_get(urls string) string {fmt.Println("----------1. http.Get的方式请求-------------")var res_html string = ""resp, err := http.Get(urls)if err != nil {fmt.Println("http get error", err)}defer resp.Body.Close() //函数结束时关闭Body
body, err := ioutil.ReadAll(resp.Body)if err != nil {fmt.Println("read error", err)}res_html = string(body)fmt.Println("返回结果:", res_html)return res_html
}/** 2. http.post的方式请求* 使用这个方法的话,第二个参数要设置成”application/x-www-form-urlencoded”,否则post参数无法传递*/
func http_post(urls, data string) string {fmt.Println("----------2. http.post的方式请求-------------")var res_html string = ""resp, err := http.Post(urls,"application/x-www-form-urlencoded",strings.NewReader(data))if err != nil {fmt.Println("http get error", err)}defer resp.Body.Close() //函数结束时关闭Body
body, err := ioutil.ReadAll(resp.Body)if err != nil {fmt.Println("read error", err)}res_html = string(body)fmt.Println("返回结果:", res_html)return res_html
}/** 3. http.PostForm方法*/
func http_PostForm(urls string) string {fmt.Println("----------2. http.PostForm的方式请求-------------")var res_html string = ""resp, err := http.PostForm(urls, url.Values{"key": {"Value"}, "id": {"123"}})if err != nil {fmt.Println("http from post error", err)}defer resp.Body.Close() //函数结束时关闭Body
body, err := ioutil.ReadAll(resp.Body)if err != nil {fmt.Println("read error", err) // handle error
    }res_html = string(body)fmt.Println("返回结果:", res_html)return res_html
}/** 4. http.do方法的GET方式进行请求* 有时需要在请求的时候设置Header、cookie, 请求体、代理、证书验证等参数之类的数据,就可以使用http.Do方法。*/
func http_do_get(urls string) string {fmt.Println("----------4. http.do方法的GET方式进行请求-------------")var res_html string = ""httpClient := &http.Client{}req, err := http.NewRequest("GET", urls, nil) //GET方式提交数据if err != nil {fmt.Println("http do get error", err)}sp_host := strings.Split(urls, "//")[1]host := strings.Split(sp_host, "/")[0]req.Header.Set("Host", host)req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0")req.Header.Set("Content-Type", "application/x-www-form-urlencoded")req.Header.Set("Connection", "keep-alive")res, err := httpClient.Do(req) //发送请求if err != nil {log.Fatalln("Fail: The web address cannot be accessed!\n") //网址打不开时提示错误信息!
    }defer res.Body.Close() //函数结束时关闭Body
body, err := ioutil.ReadAll(res.Body)if err != nil {fmt.Println("read error", err)}res_html = string(body)fmt.Println("返回结果:", res_html)return res_html
}/** 5. http.do方法的POST方式进行请求* 有时需要在请求的时候设置Header、cookie, 请求体、代理、证书验证等参数之类的数据,就可以使用http.Do方法。*/
func http_do_post(urls, data string) string {fmt.Println("----------5. http.do方法的POST方式进行请求-------------")var res_html string = ""httpClient := &http.Client{}req, err := http.NewRequest("POST", urls, strings.NewReader(data)) //POST方式提交数据if err != nil {fmt.Println("http do post error", err)}sp_host := strings.Split(urls, "//")[1]host := strings.Split(sp_host, "/")[0]req.Header.Set("Host", host)req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0")req.Header.Set("Content-Type", "application/x-www-form-urlencoded")req.Header.Set("Connection", "keep-alive")res, err := httpClient.Do(req) //发送请求if err != nil {log.Fatalln("Fail: The web address cannot be accessed!\n") //网址打不开时提示错误信息!
    }defer res.Body.Close() //函数结束时关闭Body
body, err := ioutil.ReadAll(res.Body)if err != nil {fmt.Println("read error", err)}res_html = string(body)fmt.Println("返回结果:", res_html)return res_html
}/** 6. http.do方法的GET方式进行请求并设置代理访问* 有时需要在请求的时候设置Header、cookie, 请求体、代理、证书验证等参数之类的数据,就可以使用http.Do方法。*/
func http_do_get_proxy(urls string) string {fmt.Println("----------6. http.do方法的GET方式进行请求并设置代理访问-------------")var res_html string = ""//设置代理proxyURL, _ := url.Parse("http://127.0.0.1:10809")trans := &http.Transport{Proxy: http.ProxyURL(proxyURL),}httpClient := &http.Client{Transport: trans,}req, err := http.NewRequest("GET", urls, nil)if err != nil {fmt.Println("http do post error", err)}sp_host := strings.Split(urls, "//")[1]host := strings.Split(sp_host, "/")[0]req.Header.Set("Host", host)req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0")req.Header.Set("Content-Type", "application/x-www-form-urlencoded")req.Header.Set("Connection", "keep-alive")res, err := httpClient.Do(req) //发送请求if err != nil {log.Fatalln(err) //网址打不开时提示错误信息!
    }defer res.Body.Close() //函数结束时关闭Body
body, err := ioutil.ReadAll(res.Body)if err != nil {fmt.Println("read error", err)}//正则匹配返回结果中的的IP信息reg, _ := regexp.Compile("您的iP地址是:\\[.+?\\]")sproxy := reg.FindString(string(body))res_html = string(body)fmt.Println("使用代理后你的IP地址是:", sproxy) //打印//fmt.Println("返回结果:", res_html)return res_html
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/799227.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SDK实现广播的流程

其中APP:application 指应用程序 SD:softdevice    指蓝牙协议栈 SCANNER: 指扫描设备您的资助是我最大的动力!金额随意,欢迎来赏!如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】按钮。如果,您希望更容易地发现我的新博客,不妨点击一下绿色通…

ZBlogPHP提示非法访问,验证码不显示,验证码报错

针对您在 ZBlogPHP 升级后遇到的问题,以下是解决步骤:定位文件位置使用 FTP 客户端或者通过您的虚拟主机控制面板中的文件管理器找到 zb_users 目录。 打开 c_option.php 文件。修改配置选项在 c_option.php 文件中找到如下两行配置:phpZC_LOGIN_CSRFCHECK_ENABLE => tru…

【Java】若依框架(RuoYi-master)——8.文件上传

若依框架的自带上传和下载功能,但需要我们进行恰当的操作(具体也可以参考示例和源码)。新建表格 新建一张学生信息表(这里的字段、文件路径、文件名称与改说明相关):DROP TABLE IF EXISTS `sys_student`; CREATE TABLE `sys_student` (`student_id` int NOT NULL AUTO_I…

STP

STP简介STP 背景 传统拓扑环境,设备与设备之间只存在单条链路进行连接,就会产生单点故障的问题,为了解决单点故障问题,进行冗余环境的部署,但是冗余环境又会产生很多问题,造成环路,环路中又存在其他的问题:广播风暴、帧的多个副本、MAC地址表不稳定等 STP作用 STP:生成…

牛客周赛60

A 困难数学题一个数异或其本身就是0,直接输出0就好 B 构造序列正负数要相邻,那最长的序列肯定是数量最多的数放第一个,例3a2b ,a baba,ba为一组,最后结果为少的数的两倍+最开始的那个数,特判两数相等情况点击查看代码 ll a, b;cin >> a >> b;if (a < b){sw…

Ros2- Moveit2- Subrame( 子坐标 )

子坐标是在CollisionObjects上定义的坐标。 它们可用于定义您放置在场景中的对象上的兴趣点,例如瓶子的开口、螺丝刀的尖端或螺丝的头部。它们可用于规划和编写机器人指令,例如“拿起瓶子,然后将开口移到水龙头的喷口下方”,或“拿起螺丝刀,然后将其放在螺丝头上方”。 编…

精简实用!一分钟搭建文件管理服务!

Dufs —— 一款多功能的实用文件服务器。不仅支持静态文件的托管服务,还具备文件上传、搜索以及访问控制等功能,并且兼容 WebDAV 协议,支持 HTTPS 加密连接,保障了数据传输的安全性。大家好,我是 Java陈序员。 今天,给大家介绍一款精简实用的文件托管服务,一分钟即可搭建…

微信小程序wx.request请求封装

config.js // 请求地址 const BASE_URL = "https://localhost:8080" const TIMEOUT = 10000export {BASE_URL,TIMEOUT }server.js 假设这里返回的数据结构为 {"code": 0,"msg": "提示信息","data": "返回数据" }当…

[附源码]超简洁个人博客网站搭建+SpringBoot+Vue前后端分离

今天带来一款优秀的项目:个人博客系统源码 。 系统采用的流行的前后端分离结构,内含功能包括 "写博客文章",“修改博客文章”,“富文本编辑器”,“评论管理”“管理员角色”,“游客角色”,“文章标签”,“文章分类” 如果您有任何问题,也请联系小编,小编是…

99元阿里云服务器部署若依前后端分离版(ruoyi-vue)

1. 购买阿里云 最近阿里云推出99元套餐,相当划算,薅羊毛搞起 ->新老同享阿里云99一年系统选择centos 2. 安装JDKJDK >= 1.8 虽说推荐1.8版本,但毕竟有点老,我选的JDK17,安装过程如下: # 下载安装包 wget https://download.oracle.com/java/17/archive/jdk-17.0.1_l…

.NET 开源工业级移动端仓库管理系统

前言 在工业生产中,定制化的软件对于每个环节都至关重要。对于仓库管理,推荐一款开源的仓库管理系统(WMS)解决方案。 这款基于.NET 框架开发的移动应用,提供了全面的仓库操作、订单处理、主数据管理、数据分析及个人信息设置等功能,是工业仓库管理的有利助手。 项目介绍 …

Linux下eCal测试计划及进度记录

完整的源代码包:# 安装依赖 sudo apt-get install git cmake doxygen graphviz build-essential zlib1g-dev sudo apt-get install libhdf5-dev libprotobuf-dev libprotoc-dev protobuf-compiler sudo apt-get install libcurl4-openssl-dev libqwt-qt5-dev libyaml-cpp-dev…