新手求助,net/http包跳转问题

GreyFinger · · 1422 次点击
谢谢大佬,学习了学习了
#2
更多评论
jan-bar
想要拥有,必定付出。
#### 对于新人来说看源码是有点困难,但是我建议你有空可以仔细看看源码是如何处理的。分析是否可以利用已有接口到目的。 #### 下面是我研究源码给出的方案,网上应该也有其他人这样用过吧,你看看有木有帮助。 ```go package main import ( "io/ioutil" "log" "net/http" "time" ) func main() { go server() time.Sleep(time.Second) mUrl := "http://127.0.0.1:12345/post" { // 常规方法 req, err := http.NewRequest(http.MethodPost, mUrl, nil) if err != nil { log.Fatal(err) } resp, err := http.DefaultClient.Do(req) if resp != nil { defer resp.Body.Close() } if err != nil { log.Fatal(err) } byt, err := ioutil.ReadAll(resp.Body) if err != nil { log.Fatal(err) } log.Println(resp.StatusCode, "|", string(byt)) } { // 去掉自动处理重定向 req, err := http.NewRequest(http.MethodPost, mUrl, nil) if err != nil { log.Fatal(err) } resp, err := http.DefaultTransport.RoundTrip(req) if resp != nil { defer resp.Body.Close() } if err != nil { log.Fatal(err) } byt, err := ioutil.ReadAll(resp.Body) if err != nil { log.Fatal(err) } log.Println(resp.StatusCode, "|", string(byt)) } } func server() { http.HandleFunc("/post", mPost) http.ListenAndServe(":12345", nil) } func mPost(w http.ResponseWriter, r *http.Request) { http.Redirect(w, r, "http://www.baidu.com", http.StatusFound) w.Write([]byte(time.Now().String())) } ```
#1
jan-bar
想要拥有,必定付出。
秋的玛德,突然想起以前我也研究过类似需求,可以用下面这个更好的忽略重定向。看到你的问题时差不多忘记了,人老咯啊。 ```go client := &http.Client{ // 忽略证书验证 Transport: &http.Transport{ TLSClientConfig: &tls.Config{ InsecureSkipVerify: true, }, }, // 不重定向:http://www.sohu.com/a/122147787_505779 CheckRedirect: func(req *http.Request, via []*http.Request) error { return http.ErrUseLastResponse }, Timeout: 5 * time.Second, }, ```
#3