![]() |
http GET Request per TSocket senden und Response empfangen
hallo,
ich programmiere mit Delphi 7 Enterprise. ich mache gerade ein nonVCL socket programm, das auch soweit läuft. ich möchte jetzt mit dem TCP socket daten von nem Webserver abgreifen dabei hab ich mir das so gedacht:
Delphi-Quellcode:
allerdings bekomme ich keine antwort vom server.str:='GET /download/index.php HTTP/1.1'+#13#10+'Host: blumenhund.afischi.de'; FSocket:=createSocket_TCP; connectSock(FSocket,hp,80); //hp ist die ipadresse des webservers Send(FSocket,str,Length(str),1); function WndProc(hWnd: HWND; Msg: UINT; wp: WPARAM; lp: LPARAM): integer; stdcall; var str,str1:string; count:integer; begin Result := 0; case lp of FD_READ: begin str:=''; str1:=''; setLength(str1,8192); //showmessage('hallo du da'); //FillChar(str,Length(str),#0); count:=recv(FSocket,str1[1],8192,0); while count>0 do begin setLength(str1,count); str:=str+str1; setLength(str1,8192); count:=recv(FSocket,str1[1],8192,0); end; Showmessage(str); PostQuitmessage(Msg); //-- WMOnAsyncServerData(wp, lp); end; end; end; sieht mein Get-String falsch aus ? oder woran kanns liegen. die sockets funktionieren auf jedenfall und internet ist auch vorhanden, ohne proxy |
Re: http GET Request per TSocket senden und Response empfang
http erwartet am Ende eine Leerzeile
|
Re: http GET Request per TSocket senden und Response empfang
Delphi-Quellcode:
hat keinen erfolg gebracht
str:='GET /download/index.php HTTP/1.1'+#13#10+'Host: blumenhund.afischi.de'+#13#10+#13#10;
Edit:
Delphi-Quellcode:
geht auch nicht
str:='GET /download/index.php HTTP/1.1\r\nHost: blumenhund.afischi.de\r\n\r\n';
|
Re: http GET Request per TSocket senden und Response empfang
Und die anderen Angaben, welche so in einen http-Header gehören
- Accept - Accept-Language - Accept-Encoding - User-Agent - Connection Ich weis nicht, was und wie und warum davon notwendig ist. |
Re: http GET Request per TSocket senden und Response empfang
Also wenn mein Firefox einen request sendet, dann sieht der so aus:
Code:
GET /download/index.php HTTP/1.1
Host: blumenhund.afischi.de User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en-GB;q=0.7,de-DE;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 115 Connection: keep-alive |
Re: http GET Request per TSocket senden und Response empfang
hmm also mein header sieht so aus und des funzt immer noch net :D
Delphi-Quellcode:
str:='GET /download/index.php HTTP/1.1 \r\n\r\n'+
'Host: blumenhund.afischi.de\r\n\r\n'+ 'Connection: close\r\n\r\n'+ 'User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)\r\n\r\n'+ 'Accept-Encoding: gzip\r\n\r\n'+ 'Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7\r\n\r\n'+ 'Cache-Control: no \r\n\r\n'+ 'Accept-Language: de,en;q=0.7,en-us;q=0.3\r\n\r\n'; Edit: deinen habe ich auch ausprobiert Phoenix, geht aber auch nicht. Wenn ich auf nen anderen Port lausche bekomme ich gleich ne absage vom server, dass der server die verbindung abgelehnt hat, aber so bekomme ich garnix. |
Re: http GET Request per TSocket senden und Response empfang
Also ich bekomme damit von der DP eine schöne Antwort
Edit:
Delphi-Quellcode:
s:='GET / HTTP/1.1 '+#13#10+
'Host: delphipraxis.net'+#13#10+ 'Connection: close'+#13#10+ 'User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'+#13#10+ 'Accept-Encoding: gzip'+#13#10+ 'Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7'+#13#10+ 'Cache-Control: no'+#13#10+ 'Accept-Language: de,en;q=0.7,en-us;q=0.3'+#13#10#13#10; |
Re: http GET Request per TSocket senden und Response empfang
ich lad mir grad den xampp und versuch das ganze mal aufm localhorst
Edit: aufm Xampp ausprobiert klappt auch nicht :/ das muss wohl irgendwo am socket liegen. komischerweise kann ich mit meinem eigenen server kommunizieren das FD_READ wird in WndProc einfach nicht ausgelöst |
Re: http GET Request per TSocket senden und Response empfang
Delphi-Quellcode:
Macht. Müsste aber auch über Messages gehen.
uses
windows, winsock; // aus WinSock2 type WSAevent=THandle; function WSACreateEvent:WSAEvent;stdcall; external 'ws2_32.dll' name 'WSACreateEvent'; function WSACloseEvent(hEvent:WSAevent):bool;stdcall; external 'ws2_32.dll' name 'WSACloseEvent'; function WSAResetEvent(hEvent: WSAEvent):bool;stdcall; external 'ws2_32.dll' name 'WSAResetEvent'; function WSAEventSelect(s:TSocket;hEventObject:WSAevent;lNetworkEvents:LongInt):Integer; stdcall; external 'ws2_32.dll' name 'WSAEventSelect'; function WSAWaitForMultipleEvents(cEvents:DWord; lphEvents:Pointer; fWaitAll:bool; dwTimeOUT:DWord; fAlertable:bool):DWord;stdcall; external 'ws2_32.dll' name 'WSAWaitForMultipleEvents'; var SockAddr1:TSockAddr= (sin_family:af_Inet; sin_port:$5000; //=80 sin_addr:(S_addr:$C49F4B3E)); //=62.75.159.196 const WSA_WAIT_EVENT_0 = WAIT_OBJECT_0; procedure main; var wsaData:TwsaData; SockEvent:WSAEvent; Socket1:TSocket; WSAresult:Integer; buf:array[0..511] of char; s:string; begin WSAStartUp(MakeWord(2,0),WSAData); Socket1:=Socket(af_Inet,Sock_Stream,IPProto_TCP); Connect(Socket1,SockAddr1,sizeof(TSockAddr)); SockEvent:=WSACreateEvent; WSAEventSelect(Socket1,SockEvent,FD_Read); s:='GET /download/index.php HTTP/1.1 '+#13#10+ 'Host: blumenhund.afischi.de'+#13#10+ 'Connection: close'+#13#10+ 'User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'+#13#10+ 'Accept-Encoding: gzip'+#13#10+ 'Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7'+#13#10+ 'Cache-Control: no'+#13#10+ 'Accept-Language: de,en;q=0.7,en-us;q=0.3'+#13#10#13#10; send(Socket1,s[1],length(s),0); repeat WSAResult:=WSAWaitForMultipleEvents(1,@SockEvent,false,infinite,false); case WSAResult of WSA_WAIT_EVENT_0 : begin fillchar(buf,sizeof(buf),0); recv(Socket1,buf,512,0); write(buf); end; else break; end; WSAresetEvent(SockEvent); until false; WSACloseEvent(SockEvent); WSACleanUp; end; begin main; end. |
Re: http GET Request per TSocket senden und Response empfang
ich hab mal ne verbindung zu meinem server aufgebaut.
und der ankommende text beim server ist nicht der gleiche wie der abgesendete. es kommen maximal 7 zeichen an und die sind "ì?œ" andersrum, wenn ich vom server zu meinem client sende, kommt der klartext wunderbar an :gruebel: Edit: hat sich gelöst, meine fresse :wall: es lag daran:
Delphi-Quellcode:
send(Socket1,s,length(s),0);
//--->>>> so muss es sein send(Socket1,s[1],length(s),0); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:25 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