2015-05-30 17 views
7

Tôi không biết nếu nó có thể là lib std không nêu bất cứ điều gì về địa chỉ hiện tại đang được sử dụng:Cách đặt IP để sử dụng cho yêu cầu HTTP?

http://golang.org/pkg/net/http/

resp, err := http.Get("http://example.com/") 
if err != nil { 
    // handle error 
} 
defer resp.Body.Close() 
body, err := ioutil.ReadAll(resp.Body) 

Những gì tôi đang cố gắng để làm là thiết lập các địa chỉ nguồn cho rằng http yêu cầu, tại sao? vì tôi không muốn sử dụng địa chỉ ip chính của mình cho loại nội dung đó ...

+0

Bạn có muốn một thứ gì đó như proxy (hoặc proxy) không? – felipsmartins

+0

Có rất nhiều dịch vụ để làm xáo trộn địa chỉ IP của bạn (ví dụ: proxy, VPN, Tor). Tôi nghi ngờ bạn sẽ cần phải làm một cái gì đó như thế chứ không phải giả mạo IP của bạn, nếu không bạn sẽ không bao giờ nhìn thấy trang vì nó sẽ được phục vụ và địa chỉ IP không phải của bạn. –

+2

Tôi có một số ips công khai trên máy chủ của tôi, Những gì tôi muốn làm là chọn cái nào để sử dụng cho các yêu cầu web, ví dụ như thế này: http://commandliners.com/2010/03/downloading-a-file-with -wget-through-a-specific-interface/nhưng tôi không muốn dựa vào các tập tin nhị phân mở rộng ... không phải tôi muốn giả mạo địa chỉ ip của mình ... – kainlite

Trả lời

17

Bạn có thể đặt Trình quay số tùy chỉnh trong Giao dịch của Khách hàng.

// Create a transport like http.DefaultTransport, but with a specified localAddr 
transport := &http.Transport{ 
    Proxy: http.ProxyFromEnvironment, 
    DialContext: (&net.Dialer{ 
     Timeout: 30 * time.Second, 
     KeepAlive: 30 * time.Second, 
     LocalAddr: localAddr, 
     DualStack: true, 
    }).DialContext, 
    MaxIdleConns:   100, 
    IdleConnTimeout:  90 * time.Second, 
    TLSHandshakeTimeout: 10 * time.Second, 
    ExpectContinueTimeout: 1 * time.Second, 
} 

client := &http.Client{ 
    Transport: transport, 
} 
+0

đã hoạt động như một sự quyến rũ, đây là mã kết quả như một thử nghiệm với một vpn trên máy phát triển của tôi ... http://play.golang.org/p/Bh8gfggLK- cũng go-curl hoạt động với easy.Setopt (curl.OPT_INTERFACE, "10.9.8.2") .. cảm ơn :) – kainlite

+0

Vui lòng sửa & httpClient nó sẽ là & http.Client, chỉ là một dấu chấm còn thiếu. – kainlite

+0

@kainlite Bạn có chắc chắn rằng các công trình? Tôi nhận được một lỗi từ ResolveTCPAddr (bạn đang bỏ qua nó): quay số tcp 10.9.8.2:8080->54.221.194.87:80: bind: không thể gán địa chỉ được yêu cầu (tôi phải thêm một cổng vào nó vì lỗi "không thể tìm thấy cổng" trước đó). – weberc2

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