Client Post Request emulieren.
Mario Lüttich
- perl
Hallo,
kann ich per script sprache einen webclient emulieren, und somit zu testzwecke einen postrequest erzeugen?
ich habe mich gerade durch LWP::Simple von perl durchgelesen und stosse dort auch auf ein post.
die doku scheint mir soweit verständlich nur eines finde ich dabei nicht. Wie übergebe ich dort variablen und deren werte?
wenn ich ein formular abschicke wird ja bei eine get das ganze an die URL angehängt. aber wie ist das mit einem post?
kann mir jemand ein kurzes beispiel dazu nennen oder eventuell auch eines schreiben? ich sollte für meine anfwendung nicht nur get sondern auch posts testen und wollte dafür kein seperates tools verwenden sondern mir mal schnell was eigenes schreiben. so schwierig dürfte das ja auch nicht sein. nur wo gebe ich dies variablen + inhalt mit??
leider konnte ich in keiner doku dazu was finden weder google gab mir eine doku noch hier im archiv habe ich eine antwort darauf gefunden.
vielen dank Mario
Halihallo Mario
ich habe mich gerade durch LWP::Simple von perl durchgelesen und stosse dort auch auf ein post.
Glaube ich dir nicht, LWP::Simple kennt die Methode POST nicht.
die doku scheint mir soweit verständlich nur eines finde ich dabei nicht. Wie übergebe ich dort variablen und deren werte?
perldoc LWP::Simple wird dir hierbei nicht helfen. Du möchtest perldoc lwpcook lesen.
http://www.perldoc.com/perl5.8.0/lib/lwpcook.html (Section: "POST").
Bei dem Content-Type "application/x-www-form-urlencoded" kannst du der HTTP::Request-
Instanz Methode "$res->content" den gleichen String übergeben, wie er an die URL bei
GET-Methode übertragen werden würde.
<cite>
use LWP::UserAgent;
$ua = LWP::UserAgent->new;
my $req = HTTP::Request->new(POST => 'http://www.perl.com/cgi-bin/BugGlimpse');
$req->content_type('application/x-www-form-urlencoded');
$req->content('match=www&errors=0');
my $res = $ua->request($req);
print $res->as_string;
</cite>
wenn ich ein formular abschicke wird ja bei eine get das ganze an die URL angehängt. aber wie ist das mit einem post?
Bei POST werden die Daten werden nicht in der URL, sondern im Content des Requests
übermittelt.
Viele Grüsse
Philipp
Hallo,
danke schon mal.
Das würde bedeuten folgender Code ist völlig banane??
use LWP::UserAgent;
$ua = new LWP::UserAgent;
$ua->agent("$0/0.1 " . $ua->agent);
$ua->agent("new&improved");
$req = new HTTP::Request 'POST' =>
'http://www.mydomain.org/cgi-bin/test.cgi';
$req->content_type('application/x-www-form-urlencoded');
$req->content('testwert=1058891162');
$res = $ua->request($req);
print $res;
Weil das klappt leider nicht schade schade
gruss mario
Halihallo Mario
Das würde bedeuten folgender Code ist völlig banane??
banane zu welcher Erwartungshaltung?
send request
$res = $ua->request($req);
print $res;
$res ist ein Objekt. $res->as_string die HTTP-Response.
Weil das klappt leider nicht schade schade
Zu so einer Aussage gehört eine Fehlermeldung.
Viele Grüsse
Philipp
hallo,
hab eben gepostet. hat sich wohl überschnitten.
nein es gibt keine fehler ?!? weder das error log noch der rückgabe wert ist fehlerträchtig.
ich bekomme die angeforderte seite aber eben ohne inhalt.
ohne meine änderungen die ich drinnen haben wollte.
wenn ich das forumlar absende klappt es.
die logfiles access.log und auch error.log beinhaltet keine feher zum vorgang. ich betreibe den apache 2.0.47 als den ganz neuen.
hi phillip,
hab den code nun so umgestrickt.
#!/usr/bin/perl.exe
use LWP::UserAgent;
$ua = LWP::UserAgent->new;
my $req = HTTP::Request->new(POST => 'mydomain.com/cgi-bin/test.cgi');
#$req->content_type('application/x-www-form-urlencoded');
$req->content('testwert=test123456');
my $res = $ua->request($req);
print $res->as_string;
Ich bekomme zwar plausible ergebnisse zurück aber ein post bzw. das was ich nach einem normale post erwarte passiert nicht.
kein eintrag auf dem server.
wenn ich das dafür existierende formular absende passt es.
was mache ichn nur falsch?
das formular:
<form action=cgi-bin/test.cgi method=post>
<input type=hidden name=testwert value="meintestwert 203">
<input type=submit name=senden value="absenden">
</form>
muss der submit button auch noch rein??
Halihallo Mario
wenn ich das dafür existierende formular absende passt es.
was mache ichn nur falsch?
Nun, vergleiche doch einfach die Parameter beim Versenden als GET mit dem, was du im
Perl-Programm als POST übergibst.
muss der submit button auch noch rein??
Wenn das serverseitige Programm dessen Status nicht ignoriert, ja.
Viele Grüsse
Philipp
wenn ich das dafür existierende formular absende passt es.
was mache ichn nur falsch?Nun, vergleiche doch einfach die Parameter beim Versenden als GET mit dem, was du im
Perl-Programm als POST übergibst.
ich übergebe beides mal per post die gleichen parameter.
muss der submit button auch noch rein??
Wenn das serverseitige Programm dessen Status nicht ignoriert, ja.
wär mir nicht bekannt, dass diese variable abgefragt wird.
Ich tu es in meinem script auf jeden fall nicht.
aber ich mail dir das mal lieber vollstaendig, dann kannst du selber mal gucken :-))
gruss mario
Halihallo mario
wenn ich das dafür existierende formular absende passt es.
was mache ichn nur falsch?
Nun, vergleiche doch einfach die Parameter beim Versenden als GET mit dem, was du im
Perl-Programm als POST übergibst.
ich übergebe beides mal per post die gleichen parameter.
Das glaube ich dir nicht.
muss der submit button auch noch rein??
Wenn das serverseitige Programm dessen Status nicht ignoriert, ja.
wär mir nicht bekannt, dass diese variable abgefragt wird.
Wäre dir nicht bekannt? - Code posten!
Ich tu es in meinem script auf jeden fall nicht.
Und das, das online ist? - Ist dies _deines_?
aber ich mail dir das mal lieber vollstaendig, dann kannst du selber mal gucken :-))
Kein Gratissupport. Dennoch: Das, was du mir gemailt hast, war aufschlussreich -> über
dich... :-)
Viele Grüsse
Philipp
Hallo phillip
wenn ich das dafür existierende formular absende passt es.
was mache ichn nur falsch?
Nun, vergleiche doch einfach die Parameter beim Versenden als GET mit dem, was du im
Perl-Programm als POST übergibst.
ich übergebe beides mal per post die gleichen parameter.Das glaube ich dir nicht.
Hattest recht hab tatsächlich ws übersehen...
es klappt nun aber leider nicht überall.
wie erreicht man einen cookie austausch?
muss der submit button auch noch rein??
Wenn das serverseitige Programm dessen Status nicht ignoriert, ja.
wär mir nicht bekannt, dass diese variable abgefragt wird.Wäre dir nicht bekannt? - Code posten!
Ich tu es in meinem script auf jeden fall nicht.
Und das, das online ist? - Ist dies _deines_?
gewissermassen ja. zumindest habe ich mir inspirationen von einem anderen Gb geholt.
aber ich mail dir das mal lieber vollstaendig, dann kannst du selber mal gucken :-))
Kein Gratissupport. Dennoch: Das, was du mir gemailt hast, war aufschlussreich -> über
dich... :-)
könntest du mir das mal genauer erklären?
mail hast du ja..
Mario
moin,
kann ich per script sprache einen webclient emulieren, und somit zu testzwecke einen postrequest erzeugen?
Ja natürlich, es geht mit der libwwww und dem UserAgent. Auf meiner Suite findest du einen eigenen Artikel genau dazu.
Schönen Sonntag, Rolf