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 正则匹配效率详解
Apr 25 Golang
Go语言中break label与goto label的区别
Apr 28 Golang
解决golang post文件时Content-Type出现的问题
May 02 Golang
golang日志包logger的用法详解
May 05 Golang
golang gopm get -g -v 无法获取第三方库的解决方案
May 05 Golang
解决golang 关于全局变量的坑
May 06 Golang
golang 实现并发求和
May 08 Golang
Golang 获取文件md5校验的方法以及效率对比
May 08 Golang
Golang二维数组的使用方式
May 28 Golang
Golang jwt身份认证
Apr 20 Golang
深入理解 Golang 的字符串
May 04 Golang
Go本地测试解耦任务拆解及沟通详解Go本地测试的思路沟通的重要性总结
Jun 21 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对字符串的递增运算分析
2010/08/08 PHP
Laravel 自定命令以及生成文件的例子
2019/10/23 PHP
一个tab标签切换效果代码
2009/03/27 Javascript
IE Firefox 使用自定义标签的区别
2009/10/15 Javascript
改善用户体验的五款jQuery插件分享
2011/05/22 Javascript
JavaScript中的this到底是什么(一)
2015/12/09 Javascript
分类解析jQuery选择器
2016/11/23 Javascript
配置nodejs环境的方法
2017/05/13 NodeJs
详解angularjs的数组传参方式的简单实现
2017/07/28 Javascript
Bootstrap 模态框自定义点击和关闭事件详解
2018/08/10 Javascript
深入理解NodeJS 多进程和集群
2018/10/17 NodeJs
vue实现的请求服务器端API接口示例
2019/05/25 Javascript
js原生map实现的方法总结
2020/01/19 Javascript
详解Python中的type()方法的使用
2015/05/21 Python
python获取目录下所有文件的方法
2015/06/01 Python
Python中的anydbm模版和shelve模版使用指南
2015/07/09 Python
Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法
2016/04/23 Python
用Python实现命令行闹钟脚本实例
2016/09/05 Python
python 读写中文json的实例详解
2017/10/29 Python
Linux-ubuntu16.04 Python3.5配置OpenCV3.2的方法
2018/04/02 Python
Python登录注册验证功能实现
2018/06/18 Python
[原创]Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】
2018/10/29 Python
Python判断两个文件是否相同与两个文本进行相同项筛选的方法
2019/03/01 Python
在VS2017中用C#调用python脚本的实现
2019/07/31 Python
Django文件上传与下载(FileFlid)
2019/10/06 Python
解决Python列表字符不区分大小写的问题
2019/12/19 Python
Python的PIL库中getpixel方法的使用
2020/04/09 Python
HTML5中的Web Notification桌面右下角通知功能的实现
2018/04/19 HTML / CSS
英国精品买手店:Browns Fashion
2016/09/29 全球购物
手机配件第一品牌:ZAGG
2017/05/28 全球购物
StubHub新西兰:购买和出售你的门票
2019/04/22 全球购物
毕业生找工作推荐信
2013/11/21 职场文书
电影雷锋观后感
2015/06/10 职场文书
叶问观后感
2015/06/15 职场文书
javaScript Array api梳理
2021/03/31 Javascript
PHP控制循环操作的时间
2021/04/01 PHP