2017-04-20 26 views
-2

我有检查URL像这样的功能:转到HTTP克伦特不遵循重定向

func Checkurl(url string) { 
client := &http.Client{} 
req, err := http.NewRequest("GET", url, nil) 
resp, err := client.Get(url) 

在错误VAR:意外的EOF

在tcpdump的,我看到重定向和连接紧密:

15:53:41.510722 IP (tos 0x0, ttl 248, id 18315, offset 0, flags [none], proto TCP (6), length 123) 
XXX.XXX.XXX.XXX.80 > XXX.XXX.XXX.XXX.53618: Flags [F.], cksum 0xb96f (correct), seq 85:168, ack 1, win 5840, length 83: HTTP, length: 83 
HTTP/1.1 302 Moved Temporarily 
Location: http://XXX.XXX.XXX.XXX 
Connection: close 

我如何获得位置?

+0

“client.Get”的错误是什么? – JimB

+0

提出一个新问题,而不是添加“更新”。您的原始问题已解答。 –

+0

如果'client.Get'出现错误,则没有响应。你想做什么? – JimB

回答

1

使用Response.Location函数。

newUrl, err := resp.Location() 

类型Client支持重定向。请参阅CheckRedirect字段。这可能是一个更好的工具来处理重定向,这取决于你想实现的目标。

Request对象方法

client := &http.Client{} 
req, err := http.NewRequest("GET", url, nil) 
// check error 
resp, err := client.Do(req) 
// check error 
newURL, err := resp.Location() 
// check error 

默认客户端处理在默认情况下使用重定向client.Do,因此我会检查的最终目的地的响应。这很可能是你的问题的根源。

+0

RESP,犯错后:= client.Get(URL) RESP =零 ERR =意外EOF –

+0

CheckRedirect不要工作,因为响应是零意外EOF –

+0

犯错后Client.Do(REQ) –