AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Winsock HTTP Post

Ein Thema von jokerfacehro · begonnen am 17. Feb 2012 · letzter Beitrag vom 20. Feb 2012
Antwort Antwort
Benutzerbild von jokerfacehro
jokerfacehro

Registriert seit: 13. Feb 2007
306 Beiträge
 
Delphi 7 Enterprise
 
#1

Winsock HTTP Post

  Alt 17. Feb 2012, 14:40
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
"Never touch a running system administrator !"

Geändert von jokerfacehro (17. Feb 2012 um 15:05 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#2

AW: Winsock HTTP Post

  Alt 17. Feb 2012, 15:06
Hi,

der wirklich gesendete Header wäre vielleicht hilfreicher, als die Vorlage aus dem Quelltext. Da sehe ich erstmal keinen Fehler...
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"

Geändert von wicht (17. Feb 2012 um 15:06 Uhr) Grund: Typo..
  Mit Zitat antworten Zitat
Benutzerbild von jokerfacehro
jokerfacehro

Registriert seit: 13. Feb 2007
306 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: Winsock HTTP Post

  Alt 17. Feb 2012, 15:16
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.
"Never touch a running system administrator !"
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

AW: Winsock HTTP Post

  Alt 17. Feb 2012, 15:59
ich nutze die WinSock-API für HTTP-Anfragen.
Das wäre mir viel zu "Low-Level".
Ich verwende meistens das Interface IXMLHTTPRequest von Microsft.
http://www.delphipraxis.net/94462-http-ueber-msxml.html
Da werden einem viele Dinge (HTTP & HTTPS Protokollebene, Proxyserver) abgenommen.
Ich habe dazu auch noch Demos auf meim Rechner; bei Interesse einfach Bescheid sagen.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von jokerfacehro
jokerfacehro

Registriert seit: 13. Feb 2007
306 Beiträge
 
Delphi 7 Enterprise
 
#5

AW: Winsock HTTP Post

  Alt 17. Feb 2012, 16:09
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:
<?
echo $_POST['a'];
?>
aufgerufen



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;

?>
"Never touch a running system administrator !"

Geändert von jokerfacehro (17. Feb 2012 um 16:25 Uhr)
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

AW: Winsock HTTP Post

  Alt 17. Feb 2012, 17:15
Das hat schon alles seinen Sinn mit WinSock
Du könntest diesen Sinn ja mit ein oder zwei Sätzen erklären.
Aber wozu das Rad nochmals erfinden?
In deinen Beispiel letzten Beispiel ist übrigens der Content-Length falsch.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von jokerfacehro
jokerfacehro

Registriert seit: 13. Feb 2007
306 Beiträge
 
Delphi 7 Enterprise
 
#7

AW: Winsock HTTP Post

  Alt 20. Feb 2012, 12:39
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
"Never touch a running system administrator !"

Geändert von jokerfacehro (20. Feb 2012 um 12:48 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz