<< 過去の記事(Pietのコードを自動生成するものを作った。) | 未来の記事(コミケの記事を書こうと思っていたら一月経っていた。) >>

最近バイトでGolangを書いてみたりしてるのだけれど、Golangへの細かい不満はあるんだけど、 今回のは小さな不満がどうでも良くなるような感じの不満だ。

はじめに

GoogleのAPI扱ってたら、%2Fを含んだURIにリソースが置かれて、それをGolangのnet/httpで取りに行こうとしてたら、何故かうまく行かなくて、 fmt.Print(resp.Request.URL.String())してみたら、なぜか%2F/に直されていたので、それに関するツイート。

あきらかにバグだと思ってググってみたら、仕様らしくて、Won't Fixらしい。

こういう時の対処法を教えて頂いて、その通りに修正したら上手く行くかと思い、次の時に試してみた。

しかし

Opaqueを書き換えて、狙ったところにリクエストを送ることには成功したものの、 そこから307リダイレクトされた先に欲しいコンテンツが有る(言ってしまうと、Google Cloud StorageのAPIです)。 そしてそのリダイレクトする時にもまた%2F/に書き換えられてしまい、思ったところにリクエストを飛ばしてくれない(これもRequest.URL.String()を見て判明した)。

HTTPクライアントにリクエストハンドラ的なものがあるとgolang.org/pkg/net/http/を眺めていると気づいたのだけれど、

なような感じでできなさそうな感じである。

しょうがないので今のとこ、

cmd := exec.Command("curl", "-L", uri)

のようなひどいコードでごまかしてるが、何とかする方法は無いのでしょうか。誰か教えてください。 流石に何か方法が無いなら完全に壊れていると思うし、何かあるとは思うけれど、見つけられなかった……。

追記

CheckRedirectでリクエストを書き換えることはできそうな感じだったけれど、 そこのリクエストには既に%2F/に書き換えられて破壊されたURIが格納されていた という感じでした。

一応そこから心のこもった置換で(%2Fの使われている場所は大体予測できる)もとに戻すことはできそうな感じだけれど……。 なんとかならないのかなぁ……。

<< 過去の記事(Pietのコードを自動生成するものを作った。) | 未来の記事(コミケの記事を書こうと思っていたら一月経っていた。) >>