Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

php: http-post-request file-upload

Empfohlene Antworten

Veröffentlicht

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


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

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

  • Autor

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

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.

  • Autor

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.