fsockopen .. Daten mit GET anstatt POST übermitteln
Claudia
- php
0 Der Martin0 Claudia
0 suit0 Claudia0 suit0 Der Martin
Hallo !
ich habe folgendes Script, das tadellos funktioniert:
$host = 'www.example.com';
$port = 80;
$page = '/zielscript.php';
$referer = "http://".$_SERVER ['HTTP_HOST'].$_SERVER['PHP_SELF'];
$post = array(
'Anrede'=> 'Herr',
'Name'=> 'Testperson',
);
$params = '';
$flag = 0 ;
$argv = $post;
//String erzeugen
foreach ($argv as $key=>$value) {
if ($flag!=0) {
$params .= "&";
$flag = 1;
}
$params.= $key."="; $params.= utf8_encode($value);
$flag = 1;
}
$length = strlen($params);
$fp = fsockopen($host,$port,$errno,$errstr,1000) or exit($errstr."--->".$errno);
$header = "POST $page HTTP/1.1\r\n";
$header .= "Host:$host\r\n";
$header .= "Referer:$referer\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: ".$length."\r\n";
$header .= "Connection: Close\r\n\r\n";
$header .= $params."\r\n";
fputs($fp,$header);
fclose($fp);
Jetzt muss ich die Daten allerdings per GET übertragen weil das Zeilscript nur noch GET annimmt. Ersetze ich im Header POST durch GET kommen die Daten nicht mehr an.
Soll ich anstatt fsockopen einfach ein fopen mit Url machen und alle Parameter an die Url hängen ? Oder kann ich das obige Script einfach umbauen ?
Herzlichen Dank für alle Tipps.
Hi,
ich habe folgendes Script, das tadellos funktioniert:
... und einen HTTP-Request per POST absetzt, die Antwort des Servers aber gar nicht mehr anhört. Wie unhöflich ... ;-)
Jetzt muss ich die Daten allerdings per GET übertragen weil das Zeilscript nur noch GET annimmt. Ersetze ich im Header POST durch GET kommen die Daten nicht mehr an.
Natürlich nicht. Der wesentliche Unterschied zwischen GET und POST ist ja, dass beim POST die Daten im Request Body übertragen werden, und bei GET als URL-Parameter. Ergo müsstest du den ganzen Parameter-String, den du ja schon aufbereitet hast, einfach mit einem '?' vom Ressourcennamen getrennt an eben diesen Namen anhängen. Die Länge des Request Body ist dann 0.
Soll ich anstatt fsockopen einfach ein fopen mit Url machen und alle Parameter an die Url hängen ? Oder kann ich das obige Script einfach umbauen ?
Da das Script schon so weit steht, würde ich es umbauen und weiter benutzen. Wenn du fopen() verwendest, läufst du immer Gefahr, dass es irgendwann wieder nicht tut, weil der Hoster allow_url_fopen deaktiviert hat.
So long,
Martin
PS: Du plenkst. Ist aber heilbar, habe ich mir sagen lassen.
Der wesentliche Unterschied zwischen GET und POST ist ja, dass beim POST die Daten im Request Body übertragen werden, und bei GET als URL-Parameter. Ergo müsstest du den ganzen Parameter-String, den du ja schon aufbereitet hast, einfach mit einem '?' vom Ressourcennamen getrennt an eben diesen Namen anhängen. Die Länge des Request Body ist dann 0.
Herzlichen Dank ! Genau so hat es funktioniert ....
Jetzt muss ich die Daten allerdings per GET übertragen weil das Zeilscript nur noch GET annimmt. Ersetze ich im Header POST durch GET kommen die Daten nicht mehr an.
Ja, weil du alles andere nachwievor so behandelst, als wäre es POST. Google (oder die Doku zu fsockopen) sollten dir das nötige Wissen vermitteln, was der maßgebliche unterschied zwischen POST und GET ist.
Soll ich anstatt fsockopen einfach ein fopen mit Url machen und alle Parameter an die Url hängen?
Prinzipiell ja - das ist quasi eine Fire&Forget-Missile und nicht wirklich optimal, da du quasi keine Error-Reporting einbauen kannst.
Oder kann ich das obige Script einfach umbauen ?
Schlauer, ja.
Das mit dem Request hat jetzt funktioniert. Jetzt würde ich gerne die Antwort auswerten.
Die Url, die mit den jeweiligen Parametern aufgerufen wird, gibt den Strink "OK" aus wenn die Daten richtig verarbeitet wurden. Wie kann ich diesen Einlesen und Auswerten ? Ich hatte ein fread direkt hinter dem fputs gemacht, aber das ging leider nicht.
Hat jemand noch einen Tipp ? Herzlichen Dank !
Wie kann ich diesen Einlesen und Auswerten ?
Die fsockopen()-Doku liefert einige Beispiele (auch in den Diskussionen findest du Beispiele die das tun was du möchtest).
Hallo,
Das mit dem Request hat jetzt funktioniert. Jetzt würde ich gerne die Antwort auswerten.
Die Url, die mit den jeweiligen Parametern aufgerufen wird, gibt den Strink "OK" aus wenn die Daten richtig verarbeitet wurden. Wie kann ich diesen Einlesen und Auswerten ? Ich hatte ein fread direkt hinter dem fputs gemacht
ja, genau so sollte es laufen.
aber das ging leider nicht.
Und das bedeutet was genau?
Dass vor dem erwarteten "OK" erst mal die ganzen HTTP-Responseheader kommen, sollte allerdings klar sein. Wie schon beim POST-Request fängt der Nutzinhalt erst nach der ersten Leerzeile an.
So long,
Martin