phpで書いたプログラムに対してrubyからNet::HTTP::Get
リクエストされた時のクッキーを使って、別のところにgetするコードを書いてたら地味に時間がかかったのでメモ。
複数個クッキーを持たせてhttpリクエストするときのあるクラスのコード一部
#こんなんして送りたい @@Keys.each do |k| if @cgi.cookies.has_key?(k) @request_cookies << CGI::Cookie.new(k, @cgi.cookies[k][0]) end #中略 req = Net::HTTP::Get.new("http://www.example.com/") req[ "cookie" ] = @request_cookies
cgi.rbを読むとcookieってキーで値が配列なら適当にやってくれそうなんだけど、
<?php var_dump($_COOKIE);
をするとクッキーのpath値とか,が入ってうまく取り出せない。CGI::Cookie.to_sをいじってみたけど、こいつを呼び出す元で,を勝手につけてくれるのが原因ぽかった。(p callerを入れて確認した)
ただクッキーを送るときのhttpヘッダがどうなるかぐらいは分かってるので、最終的には以下みたいに直接文字列をくっつけた。
@request_cookies += "#{k}=#{@cgi.cookies[k][0]}; "
これで解決。ググっても同じ問題に直面してる人が見つからなかったから、他の人はメモを残そうと思う前にサクッと解決できてるんだろうなー