Perl についての質問です。あるサイトを参考に以下のソースを組みましたがうまくいきません。


# リクエストの生成
my $url = "http://www.test.com/index.php";

my $host = "$url";
my $port = "80";
my $jsessionid = "lwpcookies.txt";

my $ua = new LWP::UserAgent;
my $req = new HTTP::Request POST => "$url";
$req->content_type('application/x-www-form-urlencoded');
$req->content("name=ほんげら&comment=クックロビン");

my $cookie_jar = HTTP::Cookies->new;
$cookie_jar->set_cookie(undef, "JSESSIONID", $jsessionid, "/", $host, $port);
$ua->cookie_jar($cookie_jar);

my $res = $ua->request($req);

if ($res->is_success) {

print "SUCCESS\n";
my $http = $res->content;

print "\n${http}\n";

} else {

print "FAILED\n";

}

クッキーと一緒にPOSTで投げるプログラムなのですが、どこがおかしいか指摘していただけないでしょうか?useの宣言はきちんとしてあります。

回答の条件
  • URL必須
  • 1人20回まで
  • 登録:
  • 終了:2007/12/02 02:00:05
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:tkyk3 No.1

回答回数60ベストアンサー獲得回数7

ポイント60pt

とりあえず、こんな風に書き換えてみました。

#! /usr/bin/perl

use strict;
use CGI;
use CGI::Carp qw(fatalsToBrowser croak);
use LWP::UserAgent;
use HTTP::Request;
use HTTP::Cookies;

my $q = new CGI;

my $url = 'http://www.test.com/index.php';
my $port = 80;
my $jsessionid = 'lwpcookies.txt';

my $ua = new LWP::UserAgent;
my $req = HTTP::Request->new( POST => $url );
$req->content_type('application/x-www-form-urlencoded');
$req->content('name=ほんげら&comment=クックロビン');

my $cookie_jar = HTTP::Cookies->new;
$cookie_jar->set_cookie(undef, 'JSESSIONID', $jsessionid, '/', $url, $port);
$ua->cookie_jar($cookie_jar);

my $res = $ua->request($req);

print $q->header('-Content-Type' => 'text/html',
		 '-charset'      => 'UTF-8',
);

if ($res->is_success) {

print "SUCCESS\n";
my $http = $res->content;

print "\n$http\n";

} else {

print "FAILED\n";

}

CGIとしてブラウザ上で実行すると仮定してですが、意図したメッセージが表示されるようにするには、HTTPヘッダを付加してやる必要があるので、

use CGI;
my $q = new CGI;
print $q->header('-Content-Type' => 'text/html',
		 '-charset'      => 'UTF-8',
);

を追加してみました。(UTF8の場合。Shift-JISでしたら、このあたりも変えないと)

あと、

print "\n${http}\n";

print "\n$http\n";

かなと思うのですが如何でしょうか。

ただ、上のソースは文法チェックのみなので、実際にうまくいくかどうかは別問題です…また状況が分かれば投稿したいと思います。


http://hatena.ne.jp

  • id:thrillseeker
    どのようにうまく行かないのかをもっと具体的に書いた
    ほうが効果的な回答をもらいやすいと思いますよ。
    接続時にウェブサーバに残ったログが分かれば更にGoodです。
  • id:tkyk3
    結局、うまくいったのでしょうか…後日談があれば、分かる範囲でコメントに書こうと思います。>zachouRさん
  • id:zachouR
    すいません!

    非常に遅くなりましてすいません!

    返信をおくったつもりなのが、書き込まれていませんでした、、、。

    結果はうまくいきました!ありがとうございました。
  • id:tkyk3
    うまくいったようで良かったです(^^)

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません