Closed yamamoto-febc closed 3 years ago
最小構成での発生を確認。
func main() {
caller := api.NewCaller(&api.CallerOptions{
AccessToken: os.Getenv("SAKURACLOUD_ACCESS_TOKEN"),
AccessTokenSecret: os.Getenv("SAKURACLOUD_ACCESS_TOKEN_SECRET"),
UserAgent: "usacloud-golang-playground",
TraceHTTP: true,
})
op := sacloud.NewInterfaceOp(caller)
results, err := op.Find(context.Background(), "is1a", &sacloud.FindCondition{
Filter: search.Filter{
search.Key("MACAddress"): search.AndEqual("AA:AA:AA:AA:AA:AA"),
},
})
fmt.Println(results, err)
}
パラメータからquery stringへの変換を行う際に以下のようにしているのが原因の模様。
(&url.URL{Path: p}).String()
ではなくurl.PathEscape
を使えば解決できそう(スペースも%20にエスケープされる)。
func Example() {
fmt.Println((&url.URL{Path: "00:00:5E:00:53:00"}).String())
fmt.Println(url.PathEscape("00:00:5E:00:53:00"))
fmt.Println(url.PathEscape("with space"))
// Output:
// ./00:00:5E:00:53:00
// 00:00:5E:00:53:00
// with%20space
}
sacloud.InterfaceOp
のFindに以下のようなフィルタを指定するとMACAddressの先頭に./
が付与されて適切にフィルタされない。JSON.Marshalのタイミングで付与されている?