没有方案的网址抛出错误

时间:2013-04-21 17:58:08

标签: go

我写了一个代理,问题是网站上的一些链接 没有例如谷歌的计划:

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

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

2 个答案:

答案 0 :(得分: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)
}

答案 1 :(得分:2)

缺少的方案允许浏览器选择协议,并且对于同时提供这两者的网站都很方便 http和https。浏览器然后根据他到达页面的方式选择使用哪种协议。 您可以使用https或http作为默认设置,或者像浏览器一样使用您选择的协议 获取页面。

例如,像这样:

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