2013-05-28 23 views
18

Vì vậy, tôi đang sử dụng gói net/http. Tôi đang nhận một URL mà tôi biết chắc chắn đang chuyển hướng. Nó thậm chí có thể chuyển hướng một vài lần trước khi hạ cánh trên URL cuối cùng. Chuyển hướng được xử lý tự động sau hậu trường.Trong golang, làm thế nào để xác định URL cuối cùng sau một loạt các chuyển hướng?

Có cách nào dễ dàng để tìm ra URL cuối cùng không có cách giải quyết hack liên quan đến việc thiết lập trường CheckRedirect trên đối tượng http.Client không?

Tôi đoán tôi nên đề cập đến rằng tôi nghĩ rằng tôi đã đưa ra một cách giải quyết, nhưng đó là loại hackish, vì nó liên quan đến việc sử dụng biến toàn cục và thiết lập trường CheckRedirect trên http.Client tùy chỉnh.

Phải có cách làm sạch hơn. Tôi hy vọng cho một cái gì đó như thế này:

package main 

import (
    "fmt" 
    "log" 
    "net/http" 
) 

func main() { 
    // Try to GET some URL that redirects. Could be 5 or 6 unseen redirections here. 
    resp, err := http.Get("http://some-server.com/a/url/that/redirects.html") 
    if err != nil { 
    log.Fatalf("http.Get => %v", err.Error()) 
    } 

    // Find out what URL we ended up at 
    finalURL := magicFunctionThatTellsMeTheFinalURL(resp) 

    fmt.Printf("The URL you ended up at is: %v", finalURL) 
} 
+0

Tôi xin lỗi tôi không có một URL thực để bạn có thể làm việc với. Điều này là dành cho công việc của tôi và trang web tôi đang làm việc với yêu cầu bằng chứng xác thực, v.v. –

+3

bản sao có thể có của [Cách truy xuất đích URL cuối cùng trong khi sử dụng gói http trong Go?] (Http://stackoverflow.com/questions/ 16532436/how-to-retrieve-the-final-url-destination-while-using-the-http-package-in-go) – peterSO

Trả lời

59
package main 

import (
    "fmt" 
    "log" 
    "net/http" 
) 

func main() { 
    resp, err := http.Get("http://stackoverflow.com/q/16784419/727643") 
    if err != nil { 
     log.Fatalf("http.Get => %v", err.Error()) 
    } 

    // Your magic function. The Request in the Response is the last URL the 
    // client tried to access. 
    finalURL := resp.Request.URL.String() 

    fmt.Printf("The URL you ended up at is: %v\n", finalURL) 
} 

Output:

The URL you ended up at is: http://stackoverflow.com/questions/16784419/in-golang-how-to-determine-the-final-url-after-a-series-of-redirects 
+0

cảm ơn bạn đã trả lời! Nó làm việc cho tôi giống như bạn đã chứng minh. Xin lỗi đã mất nhiều thời gian để tôi đánh dấu đó là câu trả lời đúng. Một số mặt hàng ưu tiên cao hơn xuất hiện tại nơi làm việc. –

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