Tag - go

go golang 重定向 http 刘迎光 狐刺科技    2019-05-15 09:45:23    99

原因

  1. 爬虫获取百度查询结果的时候,为了获取网页真实地址,而百度跳转页面的其中一种方式就是302重定向(redirect),那么针对这种方式,go语言默认自动执行redirect的,所以没办法使用get请求获取真实地址
  2. 对于第一条描述的,在302重定向的时候,真实地址在response的location中
  3. go语言中,默认是支持10层redirect,所以,除非跳出,否则会redirect 到第10层才退出,然而也是可以自定义的

自定义redirect规则示例

  1. package main
  2. import (
  3. "fmt"
  4. "net/http"
  5. "errors"
  6. )
  7. func main() {
  8. url:="https://www.baidu.com/link?url=IIZcBDQ9FSkK8wRluFkNAxjf4a7VDwHH0kFqGazjEAFGRDdnxe0HqQRdSocksxbbrpMjo7PTBeGjgnmf0aYOqN7ld6dXDBVO_jMYS16Yuy7CI5M_TMysMLpmFhF4CEjGjXOEYvjL_r9Hgz2-4jwsoa"
  9. client := &http.Client{
  10. CheckRedirect: myCheckRedirect,
  11. }
  12. req, err := http.NewRequest("GET", url, nil)
  13. if err != nil{
  14. }
  15. resp, err := client.Do(req)
  16. if err != nil{
  17. }
  18. fmt.Println(resp.Status)
  19. respUrl,err := resp.Location()
  20. if err != nil{
  21. }
  22. fmt.Println(respUrl.String())
  23. }
  24. func myCheckRedirect(req *http.Request, via []*http.Request) error {
  25. //自用,将url根据需求进行组合
  26. if len(via) >= 1 {
  27. retu