MudGuard: +(PERL) POST-Request per Perlscript

Hallo,

ich versuche mich gerade daran, einen Post-Request per Perlscript zu bauen. Aber es gelingt mir nicht so recht.
Mein Script ist (noch) primitiv, es soll aber - wenn ich erstmal rausgekriegt habe, wie der post-request aussehen muß  - komplexer werden. Konkret will ich damit ein paar Tests von Formularen automatisch durchführen. Derzeit schickt es nur den Request und schreibt die Response auf stdout.

Der Request kommt an, ich bekomme auch eine Response (Code 200, also ok).

Als URL habe ich einfach ein kleines PHP-Script, das die beiden übergebenen Parameter ausgeben soll.
Leider kommen die Parameter aber nicht an.
Ich möchte folgendes simulieren
<form action="http://localhost/test.php" method="post">
<div>
<input type="text" name="blabla" value="blubb">
<input type="text" name="laber" value="brabbel">
</div>
</form>

Wie genau muß denn der content aussehen?
Oder fehlt noch was im header?

Hier das Script:

#!perl -w
use strict;
use warnings;
use LWP;
use HTTP::Headers;
use HTTP::Request;

my $ua = new LWP::UserAgent;
$ua->agent("MudGuard/1.0");
my $content = "blabla=blubb\nlaber=brabbel\n";
my $contlen = length($content);

my $req = HTTP::Request->new("GET","http://localhost/testpost.php");

$req->header("content-length" => $contlen);
$req->header("content-type" => "application/x-www-form-urlencoded");
$req->header("content-encoding" => "iso-8859-1");

$req->content($content);

my $res = $ua->request($req);
print "HTTP Result code: ".$res->code."\n\n";
print $res->headers->as_string() if ($res->is_success);
print ($res->is_success ? $res->content : $res->message);

im Content habe ich anstelle des \n auch & und ; probiert - ohne Änderung am Ergebnis.

Was mache ich falsch? Was muß ich anders machen?

In RFCs 1945, 2068 und 2616 habe ich nichts brauchbares gefunden, wie ich die "Formulardaten" liefern muß.

Vielen Dank im Voraus!

Andreas

  1. Hi,

    ich bin zwar nicht so sehr der Perl-Experte aber ...

    my $req = HTTP::Request->new("GET","http://localhost/testpost.php");

    ^^^
                                     sollte das nicht POST heißen?

    Grüße,

    Christian

    1. Hi,

      Hi

      ich bin zwar nicht so sehr der Perl-Experte aber ...

      my $req = HTTP::Request->new("GET","http://localhost/testpost.php");
                                       ^^^
                                       sollte das nicht POST heißen?

      Ja, natürlich. Ich bin mit Blindheit geschlagen....

      Typischer Copy-Paste-Forget-Fehler...

      POST und ein ; zwischen den Werten und es tut, wie es soll!

      Vielen vielen Dank!

      Andreas

      1. POST und ein ; zwischen den Werten und es tut, wie es soll!

        und ein & zwischen den Werten - nicht mein Tag heute.

        Andreas

  2. Hallo,

    ich versuche mich gerade daran, einen Post-Request per Perlscript zu bauen. Aber es gelingt mir nicht so recht.
    Mein Script ist (noch) primitiv, es soll aber - wenn ich erstmal rausgekriegt habe, wie der post-request aussehen muß  - komplexer werden. Konkret will ich damit ein paar Tests von Formularen automatisch durchführen. Derzeit schickt es nur den Request und schreibt die Response auf stdout.

    Der Request kommt an, ich bekomme auch eine Response (Code 200, also ok).

    Als URL habe ich einfach ein kleines PHP-Script, das die beiden übergebenen Parameter ausgeben soll.
    Leider kommen die Parameter aber nicht an.
    Ich möchte folgendes simulieren
    <form action="http://localhost/test.php" method="post">
    <div>
    <input type="text" name="blabla" value="blubb">
    <input type="text" name="laber" value="brabbel">
    </div>
    </form>

    Wie genau muß denn der content aussehen?

    beim post-Request wird das komplette Formular versendet, der content muss demnach aus HTML-Elementen bestehen, oder?

    Gruss,
    Kube

    Oder fehlt noch was im header?

    1. Hi,

      auch Dir (und allen anderen) Dank, daß Du mein Posting gelesen hast.

      beim post-Request wird das komplette Formular versendet, der content muss demnach aus HTML-Elementen bestehen, oder?

      Nein, bei Post wird der Formularinhalt nicht in der Url, sondern im content des Requests verschickt.

      Lösung siehe Christian und meine Antworten darauf.

      Andreas