HTTP proxy自体の仕組みは簡単で、ブラウザが本来の通信したいサーバに送られるはずのリクエストを代わりにproxyサーバに送るだけで実現している。ただし、ブラウザが送るリクエスト中のURLは相対パス(/)から絶対パス(http://example.com/)に変化するが。
仕組みがほぼHTTPサーバだからこれはHTTPサーバになるライブラリを使えばうまく書けそうなのでScala用の軽量WebフレームワークSprayを使うことにした。SprayにはHTTPサーバ/クライアント、が高級低級幅広くモジュール化されて提供されており、いじりやすい設計だ。またSprayの内部はAkkaベースで動いているから既存の知識をある程度使いまわせる。
今日書いたコードはうまく動かなかったが明日ごろには動くようになると思う。公開はその後にする。