私はプロキシを作成しますが、問題は、Web サイトの一部のリンクに、Google などのスキームがないことです。
<a class="ab_dropdownlnk" href="//www.google.com/support/websearch/?source=g&hl=en">
Client.Do() 経由で URL を取得し
ます Go でそのような URL を解決するにはどうすればよいですか?
私はプロキシを作成しますが、問題は、Web サイトの一部のリンクに、Google などのスキームがないことです。
<a class="ab_dropdownlnk" href="//www.google.com/support/websearch/?source=g&hl=en">
Client.Do() 経由で URL を取得し
ます Go でそのような URL を解決するにはどうすればよいですか?
スキームがない場合は、適切なデフォルトを使用してください。例えば、
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"net/url"
)
func main() {
href := "//www.google.com/support/websearch/?source=g&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)
}
欠落しているスキームにより、ブラウザはプロトコルを選択でき、http と https の両方を提供するサイトに便利です。ブラウザは、ページに到達した方法に応じて、使用するプロトコルを選択します。デフォルトとして https または http を使用するか、ブラウザのように動作して、ページの取得に使用したプロトコルを選択できます。
たとえば、次のようなものです。
for _, parsedLink := range parsedLinks {
parsedLink.Scheme = requestUrl.Scheme
}