2013-04-21 98 views
1

我写了一个代理,问题是,在网站上 一些环节没有如谷歌计划:URL,而不方案抛出错误

<a class="ab_dropdownlnk" href="//www.google.com/support/websearch/?source=g&amp;hl=en"> 

我通过Client.Do获取网址()
如何解决在Go这样的网址?

回答

2

如果没有方案,则使用合理的默认值。例如,

package main 

import (
    "fmt" 
    "io/ioutil" 
    "log" 
    "net/http" 
    "net/url" 
) 

func main() { 
    href := "//www.google.com/support/websearch/?source=g&amp;hl=en" 
    url, err := url.Parse(href) 
    if err != nil { 
     log.Fatal(err) 
    } 
    if url.Scheme == "" { 
     url.Scheme = "http" 
    } 
    req, err := http.NewRequest("GET", url.String(), nil) 
    if err != nil { 
     log.Fatal(err) 
    } 
    client := http.Client{} 
    res, err := client.Do(req) 
    if err != nil { 
     log.Fatal(err) 
    } 
    websearch, err := ioutil.ReadAll(res.Body) 
    res.Body.Close() 
    if err != nil { 
     log.Fatal(err) 
    } 
    fmt.Printf("%s\n", websearch) 
} 
2

丢失的方案让浏览器选择协议,是非常方便的,其同时提供 http和https网站。然后浏览器根据他如何进入页面选择使用哪种协议。 您可以使用https或http作为默认设置,或者像浏览器一样使用,并选择您用于 获取页面的协议。

例如,这样的事情:

for _, parsedLink := range parsedLinks { 
    parsedLink.Scheme = requestUrl.Scheme 
}