Zum Inhalt springen

php: http-post-request file-upload


Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen


$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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

ä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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...