1

私はプロキシを作成しますが、問題は、Web サイトの一部のリンクに、Google などのスキームがないことです。

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

Client.Do() 経由で URL を取得し
ます Go でそのような URL を解決するにはどうすればよいですか?

4

2 に答える 2

3

スキームがない場合は、適切なデフォルトを使用してください。例えば、

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)
}
于 2013-04-21T22:43:55.513 に答える
2

欠落しているスキームにより、ブラウザはプロトコルを選択でき、http と https の両方を提供するサイトに便利です。ブラウザは、ページに到達した方法に応じて、使用するプロトコルを選択します。デフォルトとして https または http を使用するか、ブラウザのように動作して、ページの取得に使用したプロトコルを選択できます。

たとえば、次のようなものです。

for _, parsedLink := range parsedLinks {
    parsedLink.Scheme = requestUrl.Scheme
}
于 2013-04-21T22:45:23.560 に答える