Http Post mit PHP
-
Kann mir einer evtl. ein kleines Beispiel zeigen, wie ich Formulare auf Homepages ausfülle?
Nur die Übertragung. Ich hab schon gesehen das es fsockopen kann.
Kann mir einer ein kleines beispiel posten, wo zusehen ist wie ich eine Verbindung aufbaue, Daten übertrage und wieder den Stream schliesse.
-
per hand über php beispielsweise
php -f deinedatei.php
oder über c++ (beispiel im magazin, ein toller artikel über sockets)
oder eine andere sprache.. je nach gusto.und dann das protokoll kennen und anwenden (zeilenumbrüche zwingend und beachten).
function send ($host, $path, $referer, $data_to_send) { $fp = fsockopen($host,80); 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\r\n"); while(!feof($fp)) { $res .= fgets($fp, 128); } fclose($fp); return $res; } /////////////////////////////////// $data = "blub=hi"; $x = send ( "localhost", "/test.php", "http://localhost/test.php", $data )
-
<?php function PostToHost($host, $port, $path, $postdata) { $data = ""; $boundary = "---------------------".substr(md5(rand(0,32000)),0,10); //verbindung aufbauen $fp = fsockopen($host, $port, $errno, $errstr); if (!$fp) { echo "errno: $errno \n"; echo "errstr: $errstr\n"; return $result; } if ($fp){ echo "Socket ready";} fputs($fp, "POST $path HTTP/1.0\n"); fputs($fp, "Host: $host\n"); echo "Host $host Port $port Path $path Daten $data"; //Formular auswählen fputs($fp, "Content-type: multipart/form-data; boundary=".$boundary."\n"); // Ab dieser Stelle sammeln wir erstmal alle Daten in einem String // Sammeln der POST Daten // Formulardaten liegen im Array postdata foreach($postdata as $key => $val) { $data .= "--$boundary\n"; $data .= "Content-Disposition: form-data; name=\"".$key."\"\n\n".$val."\n"; } $data .= "--$boundary\n"; // Senden aller Informationen // Posten der Daten an das Ziel echo "Daten2 $data"; fputs($fp, "Content-length: ".strlen($data)."\n\n"); fputs($fp, $data); // Auslesen der Antwort while(!feof($fp)) { $res .= fread($fp, 1); } // Verbindung schliessen fclose($fp); // Funktion beenden return $res; } // Post Daten mit Formname und Inhalt $postdata = array('autor'=>'testuser', 'content'=>'spamming'); $x = PostToHost ("www.xxxxxxxxxxxxxxxxxxxx.de", 80, "/gb/index.php?section=guestbook§ion=add", $postdata); ?>
So sieht mein Zielformular aus. Freies Gästebuch was ich erstellt habe um das zu testen. Es wird kein Spambot! .
<form method="post" action="index.php?section=new" name="formular"> <table class="entry" cellspacing="0px" border="1px"> <tr> <th colspan="2" class="newhead">Eintrag hinzufügen</td> </tr> <tr> <td class="newleft"><b>*Name:</b></td> <td class="newright"><div style="margin-left: 5px; width: 200px; height: 22px;"><input type="text" size="30" name="autor" maxlength="30" value="<?php echo $autor; ?>" /></div></td> </tr> <tr> <td class="newleft"><b>Email:</b></td> <td class="newright"><div style="margin-left: 5px; width: 200px; height: 22px;"><input type="text" size="30" name="email" maxlength="30" value="<?php echo $email; ?>" /></div></td> </tr> <tr> <td class="newleft"><b>Homepage:</b></td> <td class="newright"><div style="margin-left: 5px; width: 200px; height: 22px;"><input type="text" size="30" name="homepage" maxlength="30" value="<?php if ($homepage) { echo $homepage; } else { echo "http://"; } ?>" /></div></td> </tr> <tr> <td class="newleft"><b>*Inhalt:</b></td> <td class="newright" style="padding: 5px;"><div style="width: <?php echo $smiley_width; ?>px; height: 100px;"><textarea cols="26" rows="5" name="content" style="float: left; "><?php echo $inhalt; ?></textarea> <div class="smileys"> <?php include("inc/smiley_buttons.php"); ?> </div></div> </td> </tr> <?php if ($captcha_act == "1") { ?> <tr> <td class="newleft"><b>*Sicherheitscode:</b></td> <td class="newright" style="padding: 5px;"><img src="inc/captcha.php" alt="" /><br /><input type="text" size="10" maxlength="6" name="captcha_form" /></td> </tr> <?php } ?> <tr> <td colspan="2" class="newhead"><input type="submit" size="30" value="Abschicken" /> <input type="reset" size="30" value="Zurücksetzen" /></td> </tr> </table> <div style="font-size: 10px;">* Pflichtfelder</div> </form> <br /><br /><br /> <?php }
Wieso bekomm ich nichts eingetragen?
Ausgabe von Webfenster
[code]Socket readyHost www.xxxxxxxxxx.cwsurf.de Port 80 Path /gb/index.php?section=guestbook§ion=add Daten Daten2 -----------------------0d7194e1c7 Content-Disposition: form-data; name="autor" testuser -----------------------0d7194e1c7 Content-Disposition: form-data; name="content" spamming -----------------------0d7194e1c7
-
Da hab wohl vergessen den Code Button ein zweites mal zu drücken.
Es ist ein Formular mit mehreren Textfeldern und ein Submit Button.
Das Captcha hatte ich als Admin ausgeschaltet.
Das Gästebuch Skript liegt im Unterverzeichnis /gb .Was kann das jetzt falsch sein. fsockopen ist frei.
-
keine ahnung, wie du dieses chaos an daten..
name="autor" etc..auffängst.
daten werden per namen übertragen und bei mehreren mit einem & verbunden.
dazu kommt, dass hochkommata an dieser stelle falsch sind.name=autor&vorname=margot&nochwas=blub
halte dich an die vorgebene postsyntax.
$_POST['name'] etc.
man kann natürlich auch ganze dateien mitschicken, aber nicht, wenn es ums posten in ein gästebuch geht.
-
Also das übertragen einzelner Einträge funktioniert.
Aber jetzt sind noch paar Probleme da.Mein Formular liegt auf der Seite XYZ. Verweist auf eine Seite mit Anhang.
<form action="index.php?act=anmelden&ref=&goon=step1" method="post">
Wenn ich nun in der Postroutine den oben aufgeführten Path eintrage passiert nix. hab ich eine Datei die nur *.php heisst klappt alles.
/gb/index.php?section=guestbook§ion=add
Warum bleibt der da ohne Funktion?
Wie kann ich Listboxen ausfüllen?
<select class="edit" name="testlist"> <option selected>-- bitte wählen --</option> <option value="auswahl">testwahl</option>
Und wie kann ich Checkboxen aktivieren?
<td><p><input type="Checkbox" name="kat15" value="ja" class="edit"> Nachrichten</p></td>