Hallo,
nach nunmehr langen Stunden der Verzweiflung und Suche sehe ich leider keinen anderen Ausweg mehr, als mich als DAU zu outen und euch um Hilfe zu bitten.
Ich habe ein CGI/PL-Script vorliegen das ich entsprechend in PHP umsetzten muß. Soweit ich das CGI-Teil verstanden habe, macht es eigentlich nichts anderes, als ein POST-Request mit Daten abzusetzten und die Antwort des Servers darzustellen.
Soweit, sogut.
Wenn ich aber nun ein POST-Request via PHP absetzte, eigentlich nach meiner Meinung mit den gleichen Daten, ist die Response immer negativ.
Ich vermute es liegt an der Datenstruktur, da ich aber von CGI 0,nix Ahnung habe bitte ich um eure Hilfe.
Das CGI-Teil sieht so aus:
#!/usr/local/bin/perl
use LWP::UserAgent;
$ua = new LWP::UserAgent;
$ua->agent("AgentName/0.1 " . $ua->agent);
my $req = new HTTP::Request POST =>
'http://www.zieladresse.de/zieldatei.pl';
$req->content_type('text');
my $content = getFileContent("$ARGV[0]");
$req->content($content);
my $res = $ua->request($req);
print "HTTP Request:\n".$req->as_string()."\n";
if ($res->is_success) {
$res_str = "HTTP Response:\n".$res->as_string()."\n";
open( RESPONSE, ">$ARGV[1]" );
print RESPONSE $res->as_string();
close( RESPONSE );
print $res_str;
}
else {
print($res->error_as_HTML."\n");
}
sub getFileContent
{
my ($FileHandle , $FileContent, $FileLength);
open(FileHandle, "<$_[0]") or die "Can't open file '$_[0]': $!";;
$FileLength = sysseek(FileHandle, 0, 2 );
if( $FileLength<=0 ) { die "file \'$_[0]\' is empty!"; }
sysseek(FileHandle, 0, 0 );
sysread(FileHandle,$FileContent,$FileLength);
close(FileHandle);
return $FileContent;
}
Die Daten die es einliest um diese zu versenden, kommen aus einer txt-Datei mit dem Aufbau:
key:value
key2:value2
usw..
Mein Versuch das ganze per PHP umzusetzten endete mit folgendem Code:
function PostToHost($host, $path, $referer, $data_to_send) {
$fp = fsockopen($host, 80);
printf("Open!\n");
fputs($fp, "POST $path HTTP/1.1\r\n");
fputs($fp, "Host: $host\r\n");
fputs($fp, "Referer: $referer\r\n");
fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($fp, "Content-length: ". strlen($data_to_send) ."\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $data_to_send);
printf("Sent!\n");
while(!feof($fp)) {
$res .= fgets($fp, 128);
echo $res.'<hr>';
}
printf("Done!\n");
fclose($fp);
return $res;
}
$data = "key=value&key2=value2";
printf("Go!\n");
$x = PostToHost(
"www.zieladresse.de",
"/zieldatei.pl",
"PHP-Script",
$data
);
Hierbei gibt der Server immer die Response, das er die daten nicht verarbeiten kann - das CGI hingegen arbeitet problemlos.
Da ich aber halt mich auf PHP beschränken möchte, ist für mich der Einsatz des CGI nicht realisierbar, da ich ganz gerne auch den Code verstehe den ich für meine Projekte benutze.
Ich hoffe daher, das hier jemand mir helfen kann.
Gruss
Dieter