Go の net/url パッケージを使用して URL を操作する
URL (Uniform Resource Locator) は、インターネットで最も重要なインフラストラクチャの 1 つです。Web アプリケーションを構築するときは、URL を操作してリソースを見つけて取得する必要があります。
より洗練された Web アプリを構築するときは、より細かいレベルで URL を操作する必要があります。スキーム、ホスト名、パス、およびクエリ パラメータを特定する必要がある場合があります。また、特殊文字を処理して Web アプリケーションを安全に保つために、URL をエンコードおよびデコードする方法も知っておく必要があります。
Go の標準ライブラリは、URL と URL コンポーネントを処理する net/url パッケージを提供します。
URL パッケージ
urlパッケージは、URL とその個別の部分を操作するための包括的な関数と機能を提供します。URL を解析、構築、エンコード、およびデコードするための関数を提供するため、このパッケージは Web 開発に役立ちます。
urlパッケージの重要な機能のいくつかは、HTTP 要求の操作と URL 構築のために URL を個々のコンポーネントに解析する機能です。urlパッケージは、文字列を URL に解析するための Parse メソッドを含むURL構造体も提供します。
url.URL構造体モデルは次のとおりです。
package main
type URL struct {
// Scheme is the protocol scheme of the URL,
// such as "http"or "https"
Scheme string
// Opaque is used to hold any opaque data
// that should be encoded in the URL
Opaque string
// User holds information about the user making the request,
// such as a username and password
User *Userinfo
// Host is the hostname or IP address
// of the server hosting the URL
Host string
// Path is the path of the URL on the server
Path string
// RawPath is the original,
// encoded path of the URL
RawPath string
// ForceQuery indicates whether the URL should include a query string
// even if it is empty
ForceQuery bool
// RawQuery is the original,
//encoded query string of the URL
RawQuery string
// Fragment is the fragment identifier of the URL,
// used for linking to a specific element on a page
Fragment string
// RawFragment is the original,
// encoded fragment identifier of the URL
RawFragment string
}
URL構造体のさまざまな部分にアクセスする方法を知っていると、検証などのタスクに役立ちます。
解析関数を使用した URL の解析
urlパッケージの解析機能は、URL 文字列を個々のコンポーネントに解析する機能を提供します。Parse関数は単一の URL を引数として取り、URL の解析済みデータとエラー タイプを含む url.URL 構造体へのポインターを返します。
Parse関数を使用して URL の要素を取得する方法を次に示します。
import (
"fmt"
"net/url"
)
func main() {
// The URL you want to parse
exampleURL: = "https://www.example.com/path?param1=value1¶m2=value2"
// Parse the URL
parsedURL, err: = url.Parse(exampleURL)
if err! = nil {
fmt.Println(err)
return
}
// Print all the fields of the URL
fmt.Println("Scheme:", parsedURL.Scheme)
fmt.Println("Opaque:", parsedURL.Opaque)
fmt.Println("User:", parsedURL.User)
fmt.Println("Host:", parsedURL.Host)
fmt.Println("Path:", parsedURL.Path)
fmt.Println("RawPath:", parsedURL.RawPath)
fmt.Println("ForceQuery:", parsedURL.ForceQuery)
fmt.Println("RawQuery:", parsedURL.RawQuery)
fmt.Println("Fragment:", parsedURL.Fragment)
fmt.Println("RawFragment:", parsedURL.RawFragment)
}
exampleURL変数は解析されていない完全な URL を保持し、Parse関数はexampleURL変数の内容を解析し、解析された URL を返します。プログラムは、Printlnへの一連の呼び出しで終了し、 URL構造体の個々のフィールドを示します。
parse 関数は、URL が実際に存在する実際の URL であるかどうかをチェックしません。URL を構文的に解析するだけです。httpパッケージを使用して、URL に GET リクエストを送信し、レスポンスを確認できます。
import (
"fmt"
"net/http"
)
func main() {
// The URL you want to check
exampleURL: = "https://www.example.com"
// Make an HTTP GET request to the URL
response, err: = http.Get(exampleURL)
if err! = nil {
fmt.Println(err)
return
}
defer response.Body.Close()
// Check the response status code
if response.StatusCode == http.StatusOK {
fmt.Println("URL exists.")
} else {
fmt.Println("URL does not exist.")
}
}
main関数は、httpパッケージのGet関数を使用してexampleURLにGET要求を行います。この関数は、応答インスタンスとエラー タイプを返します。プログラムはifステートメントで終了し、HTTP ステータス コードをhttpパッケージのStatusOk定数と照合して Web サイトの存在を検証します。
このアプローチでは、チェックの結果に基づいて、ユーザーを別のページにリダイレクトする、エラー メッセージを表示する、一定期間後にリクエストを再試行するなどのアクションを実行できます。
URL パラメータのエンコードとデコード
urlパッケージは、URL パラメーターをエンコードするための Encode メソッドを提供します。Encode関数は、URL パラメーター内の特殊文字とスペースをパーセント エンコードします。
import (
"fmt"
"net/url"
)
func main() {
// create a new url.Values struct
params: = url.Values{}
// add values to the struct
params.Add("name", "John Smith")
params.Add("age", "30")
params.Add("gender", "male")
// encode the struct into a string
encodedParams: = params.Encode()
fmt.Println(encodedParams)
// Output: "age=30&gender=male&name=John+Smith"
}
main関数はurlパッケージの新しい Values 構造体インスタンスを作成し、構造体インスタンスのAddメソッドはデータのキーと値のペアを構造体インスタンスに追加します。
Encodeメソッドは、キーと値のペアを URL 文字列形式「key1=value1&key2=value2&key3=value3」に変換します。
urlパッケージのParseQuery関数を使用して、エンコードされた URL 文字列をデコードできます。
import (
"fmt"
"net/url"
)
func main() {
// encoded string of URL parameters
encodedParams: = "age=30&gender=male&name=John+Smith"
// parse the encoded string into a url.Values struct
params, err: = url.ParseQuery(encodedParams)
if err! = nil {
fmt.Println(err)
}
// print the struct
fmt.Println(params)
// Output: map[age:[30] gender:[male] name:[John Smith]]
}
encodedParameter変数は、エンコードされた URL 文字列です。ParseQuery関数は、encodedParameter変数を受け取り、デコードされた URL 文字列とエラーを返します。
これらの Go パッケージは、Web ルーティング ゲームを次のレベルに引き上げます
Web アプリケーションのページに使用する URL は、検索エンジンでのパフォーマンスと可視性に貢献します。Web ルーティングは、着信要求を URL に基づいて適切なハンドラー関数に転送するプロセスです。
http パッケージや、Gorilla Mux、Chi、Pat、Httprouter などの一般的なサードパーティ パッケージを使用してルーティングできます。これらのパッケージは、http パッケージの複雑さの一部を抽象化することで、ルーティングをより簡単にします。
コメントを残す