Lighting@刘迎光
相信了,才有可能遇见,不相信,也许只会是擦肩而过!
Toggle navigation
Lighting@刘迎光
首页
IT技术
微服务(IT)
技术问答
OpenBI
读书笔记
公众号【今日脑图】
关于我
自媒体
归档
标签
go自定义http请求重定向动作(捕获302重定向)
go
golang
重定向
http
刘迎光
狐刺科技
2019-05-15 09:45:23
5101
lightingfire
go
golang
重定向
http
刘迎光
狐刺科技
# 原因 1. 爬虫获取百度查询结果的时候,为了获取网页真实地址,而百度跳转页面的其中一种方式就是302重定向(redirect),那么针对这种方式,go语言默认自动执行redirect的,所以没办法使用get请求获取真实地址 2. 对于第一条描述的,在302重定向的时候,真实地址在response的location中 3. go语言中,默认是支持10层redirect,所以,除非跳出,否则会redirect 到第10层才退出,然而也是可以自定义的 # 自定义redirect规则示例 ``` package main import ( "fmt" "net/http" "errors" ) func main() { url:="https://www.baidu.com/link?url=IIZcBDQ9FSkK8wRluFkNAxjf4a7VDwHH0kFqGazjEAFGRDdnxe0HqQRdSocksxbbrpMjo7PTBeGjgnmf0aYOqN7ld6dXDBVO_jMYS16Yuy7CI5M_TMysMLpmFhF4CEjGjXOEYvjL_r9Hgz2-4jwsoa" client := &http.Client{ CheckRedirect: myCheckRedirect, } req, err := http.NewRequest("GET", url, nil) if err != nil{ } resp, err := client.Do(req) if err != nil{ } fmt.Println(resp.Status) respUrl,err := resp.Location() if err != nil{ } fmt.Println(respUrl.String()) } func myCheckRedirect(req *http.Request, via []*http.Request) error { //自用,将url根据需求进行组合 if len(via) >= 1 { return errors.New("stopped after 1 redirects") } return nil } ``` 创建client的时候,指定CheckRedirect为自己重写的myCheckRedirect方法,指定“len(via) >= 1”,即第一次redirect就停止 然后,就可以正常获取到百度搜索到的真实url了 --- > by 刘迎光@狐刺科技 > OpenBI交流群:495266201 > MicroService 微服务交流群:217722918 > mail: liuyg#liuyingguang.cn > 博主首页:http://blog.liuyingguang.cn/ > OpenBI问答社区:http://www.openbi.tk/
Pre:
QuickTime + Soundflower 解决mac内录的问题
Next:
referrer 值设置不对,导致 引入百度站长 hm.js 读取只有175B且内容长度为0的原因
Table of content