golang 实现Location跳转方式


Posted in Golang onMay 02, 2021

golang作为互联网时代的C语言,对网络的支持是非常友好的,最近想做个短网址转发使用,自然想到用Golang开发。

闲话少说,直接上源码:

package main 
import (
 "fmt"
 "log"
 "net/http"
)
 
func login(w http.ResponseWriter, r *http.Request) {
 fmt.Print(fmt.Sprintf("%v+", r))
 w.Header().Set("Cache-Control", "must-revalidate, no-store")
 w.Header().Set("Content-Type", " text/html;charset=UTF-8")
 w.Header().Set("Location", "http://wap.baidu.com/")//跳转地址设置
 w.WriteHeader(307)//关键在这里!
}
func main() {
 http.HandleFunc("/", login)              //设置访问的路由
 err := http.ListenAndServe(":9090", nil) //设置监听的端口
 if err != nil {
  log.Fatal("ListenAndServe: ", err)
 }
}

补充:Go获取Location重定向url

go本身不提供重定向的url,如果想要获取,只能从源码下手。

http.Get()接收到一个url后,会进一步确认,是否包含重定向url,如果包含,自动转到新的url,我们需要做的就是在这之前截取重定向url。

进入到http包中找到函数:

//自用,保留url地址信息,头部大写进行暴露
var RedirectMy string //此行源码中没有,为自己添加
 
func defaultCheckRedirect(req *Request, via []*Request) error {
 //自用,将url根据需求进行组合
 RedirectMy = "//"+req.URL.Host+req.URL.Path//此行源码中没有,为自己添加
 if len(via) >= 10 {
  return errors.New("stopped after 10 redirects")
 }
 return nil
}

从源码中可以看出,go本身支持10次重定向,超过10次便会报错。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。如有错误或未考虑完全的地方,望不吝赐教。

Golang 相关文章推荐
golang在GRPC中设置client的超时时间
Apr 27 Golang
golang通过递归遍历生成树状结构的操作
Apr 28 Golang
Go语言中break label与goto label的区别
Apr 28 Golang
浅谈golang 中time.After释放的问题
May 05 Golang
go语言中http超时引发的事故解决
Jun 02 Golang
再次探讨go实现无限 buffer 的 channel方法
Jun 13 Golang
Golang Elasticsearches 批量修改查询及发送MQ
Apr 19 Golang
Golang 链表的学习和使用
Apr 19 Golang
Golang 遍历二叉树
Apr 19 Golang
Golang map映射的用法
Apr 22 Golang
Golang 入门 之url 包
May 04 Golang
Go gorilla/sessions库安装使用
Aug 14 Golang
解决golang post文件时Content-Type出现的问题
May 02 #Golang
对Golang中的FORM相关字段理解
May 02 #Golang
解决go在函数退出后子协程的退出问题
Apr 30 #Golang
Go语言 go程释放操作(退出/销毁)
golang DNS服务器的简单实现操作
golang slice元素去重操作
Apr 30 #Golang
Golang中interface{}转为数组的操作
Apr 30 #Golang
You might like
PHP运行出现Notice : Use of undefined constant 的完美解决方案分享
2012/03/05 PHP
php数组生成html下拉列表的方法
2015/07/20 PHP
PHP crypt()函数的用法讲解
2019/02/15 PHP
PHP进阶学习之垃圾回收机制详解
2019/06/18 PHP
javascript 跨浏览器开发经验总结(五) js 事件
2010/05/19 Javascript
浅析Js中的单引号与双引号问题
2013/11/06 Javascript
jQuery实现平滑滚动页面到指定锚点链接的方法
2015/07/15 Javascript
jQuery实现的仿select功能代码
2015/08/19 Javascript
javascript从作用域链谈闭包
2020/07/29 Javascript
详解用node搭建简单的静态资源管理器
2017/08/09 Javascript
jQuery动态添加元素无法触发绑定事件的解决方法分析
2018/01/02 jQuery
Vue的H5页面唤起支付宝支付功能
2019/04/18 Javascript
详解Node.js异步处理的各种写法
2019/06/09 Javascript
js实现无缝轮播图插件封装
2020/07/31 Javascript
详解为什么Vue中的v-if和v-for不建议一起用
2021/01/13 Vue.js
详解python中的装饰器
2018/07/10 Python
Django REST framework视图的用法
2019/01/16 Python
Python File(文件) 方法整理
2019/02/18 Python
通过实例学习Python Excel操作
2020/01/06 Python
Python MySQLdb 执行sql语句时的参数传递方式
2020/03/04 Python
PyQt5.6+pycharm配置以及pyinstaller生成exe(小白教程)
2020/06/02 Python
pytorch随机采样操作SubsetRandomSampler()
2020/07/07 Python
CSS3悬停效果案例应用
2012/11/21 HTML / CSS
Html5新特性用canvas标签画多条直线附效果截图
2014/06/30 HTML / CSS
解析HTML5中的新功能本地存储localStorage
2016/03/01 HTML / CSS
canvas实现滑动验证的实现示例
2020/08/11 HTML / CSS
小女主人连衣裙:Little Mistress
2017/07/10 全球购物
荷兰最大的多品牌男装连锁店:Adam Brandstore
2019/12/31 全球购物
学生处主任岗位职责
2013/12/01 职场文书
调解协议书
2014/04/16 职场文书
节能宣传周活动总结
2014/05/08 职场文书
医院领导班子整改方案
2014/10/01 职场文书
庆祝教师节标语
2014/10/09 职场文书
2016年百日安全生产活动总结
2016/04/06 职场文书
Python 读写 Matlab Mat 格式数据的操作
2021/05/19 Python
如何通过简单的代码描述Angular父组件、子组件传值
2022/04/07 Javascript