2014-07-04 22 views
7

Tôi muốn đăng nhập 301 so với 302 nhưng không thể thấy cách đọc mã trạng thái phản hồi trong Client.Do, Get, doFollowingRedirects, CheckRedirect. Tôi sẽ phải thực hiện chuyển hướng bản thân mình để đạt được điều này?Cách lấy mã trạng thái chuyển hướng http trong Golang

+0

Các bạn đã thử Response.StatusCode? – rvignacio

+1

@rvignacio Golang http.Client thực hiện chuyển hướng tự động sao cho tất cả điều đó sẽ cho tôi là mã trạng thái cuối cùng 200. –

Trả lời

8

Loại http.Client cho phép bạn chỉ định phương tiện di chuyển tùy chỉnh, cho phép bạn thực hiện những gì bạn đang theo dõi. Một cái gì đó như sau nên làm:

type LogRedirects struct { 
    Transport http.RoundTripper 
} 

func (l LogRedirects) RoundTrip(req *http.Request) (resp *http.Response, err error) { 
    t := l.Transport 
    if t == nil { 
     t = http.DefaultTransport 
    } 
    resp, err = t.RoundTrip(req) 
    if err != nil { 
     return 
    } 
    switch resp.StatusCode { 
    case http.StatusMovedPermanently, http.StatusFound, http.StatusSeeOther, http.StatusTemporaryRedirect: 
     log.Println("Request for", req.URL, "redirected with status", resp.StatusCode) 
    } 
    return 
} 

(bạn có thể đơn giản hóa điều này một chút nếu bạn chỉ hỗ trợ chuỗi mặc định để vận chuyển).

Sau đó bạn có thể tạo ra một khách hàng sử dụng phương tiện giao thông này, và bất kỳ trang đổi hướng nên đăng nhập:

client := &http.Client{Transport: LogRedirects{}} 

Dưới đây là một ví dụ đầy đủ, bạn có thể thử nghiệm với: http://play.golang.org/p/8uf8Cn31HC

+0

Để biết thêm thông tin nhật ký, bạn cũng có thể muốn sử dụng ['http.StatusText()'] (https://golang.org/pkg/net/http/#StatusText) để bao gồm tên thân thiện với con người của mã trạng thái. –

Các vấn đề liên quan