Einzelnen Beitrag anzeigen

loetmann

Registriert seit: 21. Dez 2003
Ort: Rostock
33 Beiträge
 
Delphi 3 Standard
 
#1

WinSocket Upload Daten per Formular empfangen (über Browser)

  Alt 6. Sep 2007, 20:42
Hallo,

ich habe mir einen Web-Server gebaut, mit WinSockets (D3). Anfordern und Senden von Daten funktioniert.
Er läuft als ServerType:=stNonBlocking.

Auch das Auslesen vom Formularen klappt im Test, sprich normale Formulardaten werden entgegengenommen.

Formular auf der html-Seite
Code:
 <form action="formulardata.fd" method="get">
<input type="text" name="input1" value=""> ... </form>
Die Daten empfange ich über den Links selbst im OnClientRead:

Socket.ReceiveText:
Code:
GET /formulardata.fd?input1=Input+test+1+%F6%E4%FC%DF+%F6%E4%FC%DF&pass=passworttest&sel1=1&text1=+%F6%E4%FC%DF%0D%0A+Test%0D%0A+%F6%E4%FC%DF%0D%0A+%D6%C4%DC%0D%0A+&sendbutt=senden HTTP/1.1
Accept: */*
Referer: [url]http://h2o/formular.htm[/url]
Accept-Language: de
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Host: h2o
Connection: Keep-Alive

das gleiche Spiel bei method="Post" wobei hier die Daten im hinteren Ende stecken.

Socket.ReceiveText:
Code:
POST /formulardata.fd HTTP/1.1
Accept: */*
Referer: [url]http://h2o/formular.htm[/url]
Accept-Language: de
Content-Type: application/x-www-form-urlencoded
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Host: h2o
Content-Length: 327
Connection: Keep-Alive
Cache-Control: no-cache

input1=Input+test+1+%F6%E4%FC%DF+%F6%E4%FC%DF&pass=passworttest&sel1=1&text1=+%F6%E4%FC%DF%0D%0A+Test%0D%0A+%F6%E4%FC%DF%0D%0A+%D6%C4%DC%0D%0A+&Klickmich=%3CP%3E%3CIMG+id%3Dsbild+height%3D115+alt%3Dtumbnail+src%3D%22testbilder%2Frosetump.jpg%22+width%3D153+name%3Dsbild%3E%3CBR%3E%3CB%3EEin+Bild+%5Bsend%5D%3C%2FB%3E+%3C%2FP%3E
So und nun zum spannenden Teil (und zur Frage):

Wenn ich eine Formular mit upload einer Datei habe wo landen dann die Daten?

Im thesocket.ReceiveLength stehen sie nicht der ist 0. thesocket:TCustomWinSocket bieten jetzt auch option/Buffer wo es versteckt sein könnte aber ohne Längenangabe?

Socket.ReceiveText:
Code:
POST /formulardata.fd HTTP/1.1
Accept: */*
Referer: [url]http://h2o/formular.htm[/url]
Accept-Language: de
Content-Type: multipart/form-data; boundary=---------------------------7d71b32b5a029c
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Host: h2o
Content-Length: 163
Connection: Keep-Alive
Cache-Control: no-cache

-----------------------------7d71b32b5a029c
Content-Disposition: form-data; name="senderbutton"

Anfrage senden
-----------------------------7d71b32b5a029c--
html dazu:
Code:
<form action="formulardata.fd" method="post" enctype="multipart/form-data">
<input type="file" size="30" accept="text/*">


<input type="submit" name="senderbutton" style="">
</form>
Oder muss ich die hochzuladene Daten vom Webbrowser anfordern?

Die Daten müssten doch im Socket.ReceiveBuf stehen oder?
  Mit Zitat antworten Zitat