重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

今晩わ。
RubyでNet::HTTPをもちいてPOST送信する際の処理について
質問です。
Net::HTTPクラスのインスタンスメソッドのpostメソッドを用いて送信する場合
送信内容を
# version 1.2 (Ruby 1.8.x or later)
response = http.post('/cgi-bin/search.rb', 'query=subject&target=ruby')

上記のように、引数に渡していると思います。
このとき、値の中にパラメータのデリミタと同じ&を入れたい場合どうしたらいいのでしょうか?
例えば
query=subject&target=ruby&PHP
のような感じでvalueとして&を渡す場合です。

Net**HTTP::Postクラスのrequestメソッドを用いてハッシュとして渡した時は問題なかったのですが、上記のpostメソッドの時がPOSTされた値を取得するときにキチンと取得できませんでした。これはなにか対処方法があるのでしょうか?
ご教授ください。
おねがいします。

A 回答 (1件)

この辺ちゃんと使った経験が無いので、「普通こうする」という回答にはなって無いかもしれませんが・・・



>Net**HTTP::Postクラスのrequestメソッドを用いてハッシュとして渡した時
これは、 #set_form_data (#form_data=) で予め値を入れたっていうことですよね?
net/http ライブラリのソースを覗いてみると、set_form_dataの方はエンコードかけていますが、HTTP#postの2引数目はそのまま文字列として取り扱っているみたいです。
ということで、一度きりの使い捨てなら「query=subject&target=ruby&PHP」を「query=subject&target=ruby%26PHP」へ書き換えれば済むんじゃないでしょうか。

こういう使い方が多いのであれば、ヘルパーメソッド作っておいてもいいかもしれませんが・・・
https://ideone.com/3fi2I
そもそも、HTTP#post側だとこういう用法を想定していないのかもしれませんね。
フォームのデータ送るなら、#form_data=を予め使っておく方が素直なのかもしれません。
    • good
    • 0
この回答へのお礼

なるほど・・。postメソッドを使いたい理由は、単純に記述が短くてすむかなとおもたからです。

Net::HTTP::Postとだと、間にワンクッション挟むことになるので
ちょこと冗長になるかなと・・・・・・。

Net::HTTP::Postをつかって自分で、楽な自作メソッドつくったほうがいいかもですね・・。

お礼日時:2011/10/02 02:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!