SongkickのAPIを呼び出して、APIキーとページ番号であるパラメーターを次のようにエンコードしています。
Url, err := url.Parse("https://api.songkick.com")
Url.Path += "/api/3.0/metro_areas/" + myArea + "/calendar.json"
parameters := url.Values{}
parameters.Add("apikey", myApiKey)
parameters.Add("page", myPage)
Url.RawQuery = parameters.Encode()
req, err := http.NewRequest("GET", Url.String(), nil)
apiKeyパラメータに%0Aを追加することを除いて、すべて問題ありません。結果のクエリは次のようになります。 http://api.songkick.com/api/3.0/metro_areas/28714/calendar.json?apikey=myKey%0A&page=12
私はnet / urlパッケージのコードに従ってきましたが、なぜこれが起こっているのか理解できません。これが発生する可能性がある唯一の場所は、エスケープ関数内のスイッチケースshouldEscape(c、mode)内ですが、ドキュメントを読むと、これは私のケースではありません。
誰かがこれについてヒントを持っていますか?
これは、イメージgolang:latestに基づいてDockerコンテナーで実行した場合にのみ発生します。ローカルPCから実行すると、正常に動作します。
これは私がファイルを読んでいる方法です:
bs, err := ioutil.ReadFile("apiKeyFile.txt")
if err != nil {
fmt.Println("Error:", err)
os.Exit(1)
}
return string(bs)
値myApiKey
には改行があり、その改行はクエリ文字列にエンコードされます。
不要な改行を削除して問題を修正します。これは、bytes.TrimSpaceを使用して、ファイルデータから先頭と末尾の空白を削除することで実行できます。
bs, err := ioutil.ReadFile("apiKeyFile.txt")
if err != nil {
fmt.Println("Error:", err)
os.Exit(1)
}
return string(bytes.TrimSpace(bs))
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加