• ベストアンサー

LWPでPOSTする際。。。

LWP::AgentでPOSTメソッドを使う際 input typeがcheckbox(複数選択可)の場合うまくいきません。 その他のタイプだとうまくいくのですが。。。(textとかhiddenとか) 記述になにか違いがあるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

どううまくいかないのでしょうか? 以下考えられる原因の予測です。 ブラウザ上でのチェックボックスの動作は、チェックが入っていると'name=value'の形式で送信しますが、チェックが入っていない場合はそもそもnameの部分も送信されません。 %formdata に form1=>''と空文字列を入力して送信したときは、 <input type="checkbox" name="form1" value=""> というチェックボックスが押されたと同様に振舞います。 チェックボックスを入れていない状態で送信したい場合は、そもそもform1のキーを含めてはいけません。 原因が違うようでしたら、具体的にどううまくいかないのかの補足をお願いします。

purr_b
質問者

補足

ありがとうございました! 空文字列のキーも含めていました。 これを直したらうまく動きました。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

#1補> checkbox(複数選択可) ということなので、多分、同じ名前を付けて処理しているのだとおもいますが、 同じ値をハッシュで my %formdata = ('chk'=>'1', 'chk'=>'2'); のようには渡せません。 そういうことではないでしょうか。 同じ値を渡したい場合は、 perldoc LWP にあるような方法で my $req = HTTP::Request->new(POST => $url); $req->content_type('application/x-www-form-urlencoded'); $req->content('chk=1&chk=2'); みたいにすればいいんじゃないかと思います あと、#2の方も仰っていますが、チェックがない場合、送信しません。

すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

どんな風に書いてますか?

purr_b
質問者

補足

use LWP::UserAgent; use HTTP::Request::Common qw(POST); # リクエストの生成 my $url='http://xxx.cgi'; my %formdata = ('form1'=>'',#値がないとき 'form2'=>'07'#値があるとき ); my $request = POST($url, [%formdata]); # UserAgentを生成して処理 my $ua = LWP::UserAgent->new; my $res = $ua->request($request); print "Content-type: text/html\n\n"; print $res->as_string; です。hiddenなどの場合はうまくいくのですが。。。

すると、全ての回答が全文表示されます。

関連するQ&A