jasso Geschrieben 9. Mai 2007 Geschrieben 9. Mai 2007 hi leute, ich stehe hier grad vor einem problem für mich ... ich habe die angabe dass ich an eine import.php datei drei parameter per http-port-request zu übergeben habe: email, pw und xmldaten (wobei letzteres ein file-upload sein soll). ich habe momentan allem anschein nach erfolgreich eine verbindung hergestellt mit:$fp = fsockopen("www.....de", 80, $err_nr, $err_str, 60); if (!$fp) { echo "error: $err_str ($err_nr)<br />\n"; } else { fclose($fp); } [/PHP]weiß aber jetzt absolut nicht weiter. wie übergebe ich jetzt die parameter? ich finde per google eigentlich immer die gleiche funktion "PostToHost" weiß aber nicht genau was diese genau macht. bin für jeden ansatz dankbar. lg jasso Zitieren
geloescht_JesterDay Geschrieben 9. Mai 2007 Geschrieben 9. Mai 2007 $postString = "POST /path/to/file HTTP/1.1\n". "Host: www.....de\n". "Content-Type: multipart/form-data\n". "Content-Length: $lengthOfContent\n\n ". "email=a@b.com&pw=Password&xmlData=EinGanzLangerXMLString". "DerAberWohlIrgendwieEncodedWerdenMuss". "WennErDasNichtSchonIst"; $fp = fsockopen("www.....de", 80, $err_nr, $err_str, 60); if (!$fp) { echo "error: $err_str ($err_nr)<br />\n"; } else { fputs($fp, $postString); while (!feof($fp)) { echo fgets($fp,128); fclose($fp); } [/PHP] Ohne Gewähr. Hypertext Transfer Protocol - Wikipedia EDIT: Wobei $lengthOfContent von dir Berechnet werden muss. Das ist die Länge, die im Body steht, also strlen("email=a@b.com&pw=Password&xmlData=E...") EDIT2: Beim Content-Type bin ich mir auch nciht 100% sicher. Zitieren
Amstelchen Geschrieben 9. Mai 2007 Geschrieben 9. Mai 2007 habe die angabe dass ich an eine import.php datei drei parameter per http-port-request zu übergeben habe: email, pw und xmldaten (wobei letzteres ein file-upload sein soll). was soll der server denn mit "email" und "pw" anfangen? wie werden denn diese script am server von "xmldaten" getrennt? weiß aber jetzt absolut nicht weiter. wie übergebe ich jetzt die parameter? indem du die genaue HTTP befehlssyntax korrekt wiedergibst: POST /bla/foo HTTP/1.1<neue zeile> Host: schasquastl.at<neue zeile> <leerzeile> <DEIN INHALT> ich finde per google eigentlich immer die gleiche funktion "PostToHost" weiß aber nicht genau was diese genau macht.sie schreibt vermittels fputs an den mit fsockopen geöffneten windows- oder unix domain socket, der mit dem lauschenden port (meist 80) verbunden ist. dann werden zeile um zeile die einzelnen HTTP-header übergeben. das ergebnis des HTTP POST wird ausgewertet und an den client zurückgegeben. s'Amstel Zitieren
jasso Geschrieben 9. Mai 2007 Autor Geschrieben 9. Mai 2007 ändert sich irgendwas an dem aufruf wenn das ganze über eine ssl-verbindung läuft? muss es dann evtl "HTTPS/1.1" heißen? Edit: :upps port 443 ... jetzt kommt zumindest schon mal ein verständlicher fehler zurück^^ Edit2: trotzdem kommt jetzt der Fehler: Your browser sent a request that this server could not understand. Reason: You're speaking plain HTTP to an SSL-enabled server port. Instead use the HTTPS scheme to access this URL, please. Zitieren
geloescht_JesterDay Geschrieben 9. Mai 2007 Geschrieben 9. Mai 2007 Instead use the HTTPS scheme to access this URL, please. Syntaktisch ist HTTPS identisch mit dem Schema für HTTP, die zusätzliche Verschlüsselung der Daten geschieht mittels SSL/TLS: Unter Verwendung des SSL Handshake Protokolls findet zunächst eine geschützte Identifikation und Authentifizierung der Kommunikationspartner statt. Anschließend wird mit Hilfe asymmetrischer Verschlüsselung oder des Diffie-Hellman-Schlüsselaustauschs ein gemeinsamer symmetrischer Sitzungsschlüssel ausgetauscht. Dieser wird schließlich zur Verschlüsselung der Nutzdaten verwendet. Du musst deine Daten also verschlüsseln. Hab das aber noch nie gemacht. Aber einfach mal so gesagt: Per SSL den Schlüssel aushandeln, deine Daten verschlüsseln und wie oben hinsenden. Zitieren
jasso Geschrieben 10. Mai 2007 Autor Geschrieben 10. Mai 2007 so leute danke für die hilfe! im endeffekt hats mit folgendem code funktioniert: $datei = "uebergabe.xml"; $file = fopen($datei, "r"); $xml = fread($file, filesize($datei)); fclose($file); $content = "email=" . urlencode("lalala@lalala.de") . "&pwd=" . urlencode("mypw"); $content = $content . "&xmldaten=" . urlencode($xml); $lengthOfContent = strlen($content); $postString = "POST /xml/import.php HTTP/1.1\r\n" . "Host: www.irgendwas.de\r\n" . "Content-Type: application/x-www-form-urlencoded\r\n" . "Content-Length: $lengthOfContent\r\n\r\n" . $content; echo "<textarea cols=100 rows=20>"; echo $postString; echo "</textarea><br>"; $fp = fsockopen("ssl://www.irgendwas.de", 443, $errno, $errstr, 60); if (!$fp) { echo "error: $errstr ($errno)<br />\n"; } else { echo "fputs-rueckgabe: " . fputs($fp, $postString); while(!feof($fp)) { $zwischen = fgets($fp, 128); $res .= $zwischen . "<br>"; } echo "<br><br>" . $res; fclose($fp); } [/PHP] für die Zeile:[PHP]$fp = fsockopen("ssl://www.irgendwas.de", 443, $errno, $errstr, 60); (im speziellen für das "ssl:/") hab ich irgendeine php-funktion nicht aktiviert gehabt (welche das ist muss ich noch herausfinden). nachdem ich aber auf einem extra rechner xampp installiert hatte hat es damit funktioniert (dort scheint die php-funktion standardmäßig aktiviert zu sein). habt mir auf jeden fall sehr weitergeholfen :uli lg jasso Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.