编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

「Go爬虫」http客户端请求之允许(禁止)重定向

wxchong 2024-07-25 13:32:58 开源技术 19 ℃ 0 评论
package main

import (
	"fmt"
	"io/ioutil"
	"net/http"
)

func main() {
	//自定义客户端,Client为结构体,
	//CheckRedirect指定处理重定向的策略。
	//如果CheckRedirect不是nil,则客户端在执行HTTP重定向之前调用它。
	//req和via参数是即将发出的请求和已经发出的请求。
	//如果CheckRedirect返回错误,那么客户端的Get方法将返回之前的响应(关闭Body)和CheckRedirect的错误(包装在url.error中),而不是相应请求req。
	//作为特例,如果CheckRedirect返回ErrUseLastResponse,则返回最新的响应,其Body未关闭,同时返回一个nil错误。
	//如果CheckRedirect为nil,则客户端使用其默认策略,即在连续10个请求后停止。
	client := &http.Client{CheckRedirect: func(
		req *http.Request,
		via []*http.Request,
	) error {
		return http.ErrUseLastResponse //禁止重定向
		//return nil 	//允许重定向
	}}
	r, _ := http.NewRequest(
		http.MethodGet,
		"http://httpbin.org/cookies/set?name=zhangsan",
		nil,
	)
	//默认的是http.DefaultClient,是允许重定向的,因此也可以写成http.DefaultClient.Do(r)
	resp, _ := client.Do(r)
	all, _ := ioutil.ReadAll(resp.Body)
	fmt.Println(string(all))
	fmt.Println(resp.Request.URL)

}

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表