![]() |
Winsock HTTP Post
Hallo,
ich nutze die WinSock-API für HTTP-Anfragen. GET-Anfragen und das Empfangen der Daten funktioniert wunderbar. Einziges Problem ist das POST. Die übergebenen Variablen werden vom PHP-Script nicht erkannt bzw. nicht übergeben. Ich sende in folgender Form meine Daten:
Code:
$header = "POST /testserver/index.php HTTP/1.1 \r\n"
."Host: localhost \r\n" ."Connection: Close \r\n" ."User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:10.0.1) Gecko/20100101 Firefox/10.0.1 \r\n" ."Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 \r\n" ."Content-Type: application/x-www-form-url-encoded" ."Content-Length: 8 \r\n\r\n" ."a=blabla";
Delphi-Quellcode:
const
Post = 'POST <FILEPATH> HTTP/1.0'+#13#10+ 'Host: <HOSTNAME>'+#13#10+ 'Content-Type: <CONTENTTYPE>'+#13#10+ 'Content-Length: <CONTENTLENGTH>'+#13#10+ 'Connection: Close'+#13#10+#13#10+ 'a=parameter&b=bla'; Benutze ich ein HTML-Post-Form reagiert meine PHP-Seite wie gewollt. Doch schicke ich meinen Post, bekomme ich die Antwort, dass die Variable "Notice: Undefined index: a in C:\xampp\htdocs\testserver\index.php on line 2" usw. nicht vorhanden sind. Ich habe mit Wireshark mir die gesendeten Header angeschaut und sehe keine relevanten Unterschiede. Meine Send-Methode überträgt auch alle Daten und die Antwort kommt auch (halt mit PHP-Error drin). Desweiteren habe ich per fsockopen das gleiche mit PHP ausprobiert und es kommt genau dasselbe bei raus. Sieht jemand den Fehler (vielleicht in meinem Header) ? Grüße :D |
AW: Winsock HTTP Post
Hi,
der wirklich gesendete Header wäre vielleicht hilfreicher, als die Vorlage aus dem Quelltext. Da sehe ich erstmal keinen Fehler... |
AW: Winsock HTTP Post
Der PHP-string sieht genauso aus, wie oben beschrieben.
Bei wireshark geht der auch genauso durch. Hier nochmal die Delphiversion mit eingesetzten werten:
Delphi-Quellcode:
Post = 'POST /testserver/ HTTP/1.1'+#13#10+ 'Host: localhost'+#13#10+ 'Content-Type: application/x-www-form-url-encoded'+#13#10+ 'Content-Length: 8'+#13#10+ 'Connection: Close'+#13#10+#13#10+ 'a=blabla'; An einer fehlerhaften Content-Length liegt es auf jedenfall nicht. |
AW: Winsock HTTP Post
Zitat:
Ich verwende meistens das Interface IXMLHTTPRequest von Microsft. ![]() Da werden einem viele Dinge (HTTP & HTTPS Protokollebene, Proxyserver) abgenommen. Ich habe dazu auch noch Demos auf meim Rechner; bei Interesse einfach Bescheid sagen. |
AW: Winsock HTTP Post
Das hat schon alles seinen Sinn mit WinSock :)
Ich hätte auch IdHTTP nehmen können, aber darum geht es nicht. Edit: so sieht das script zur abfrage aus, in der index.php wird dann einfach ein
Delphi-Quellcode:
aufgerufen
<?
echo $_POST['a']; ?>
Delphi-Quellcode:
<?php
$sock = fsockopen( "localhost", 80, $errno, $erro, 2); $header = "POST /testserver/index.php HTTP/1.1 \r\n" ."Host: localhost \r\n" // ."Connection: Close \r\n" ."User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:10.0.1) Gecko/20100101 Firefox/10.0.1 \r\n" ."Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 \r\n" ."Content-Type: application/x-www-form-url-encoded" ."Content-Length: 8 \r\n\r\n" ."a=blabla&b=dsfdf&a=whjdbwdj"; fwrite( $sock, $header); $data = $header; while(!feof($sock)) { $data .= fread( $sock, 128); } fclose($sock); $data = str_replace( "\r\n", "<br>", $data); echo $data; ?> |
AW: Winsock HTTP Post
Zitat:
Aber wozu das Rad nochmals erfinden? In deinen Beispiel letzten Beispiel ist übrigens der Content-Length falsch. |
AW: Winsock HTTP Post
Ich habe den Fehler gefunden !!!!!!!!!!!!!!!!!
Falsch: ."Content-Type: application/x-www-form-url-encoded" Richtig: ."Content-Type: application/x-www-form-urlencoded" Jetzt läuft's |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz