![]() |
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); |
Re: http GET Request per TSocket senden und Response empfang
ups, das sieht nach einem UniCode BOM aus. Verwende mal Ansistring!
Edit: Na dann... |
Re: http GET Request per TSocket senden und Response empfang
http get abfrage klappt jetzt auch wunderbar :)
|
Re: http GET Request per TSocket senden und Response empfang
Liste der Anhänge anzeigen (Anzahl: 1)
Du kannst Dir das Leben auch etwas leichter machen und mit dem Interface IXMLHTTPRequest arbeiten.
Funktioniert auch über Proxyserver und mit HTTPS! Das Demo (VCL-Anwendung) im Anhang lässt sich relativ einfach in eine Konsolenanwendung umbauen. |
Re: http GET Request per TSocket senden und Response empfang
danke für die info, werd se mir ma anschaun, muss mir aber erstmal MSXML2_TLB besorgen
da ich aber das programm so klein wie möglich haben will, werd ich das wohl mit dem socket so machen. klappt jetzt ja alles :) |
Re: http GET Request per TSocket senden und Response empfang
Zitat:
1.) Datei -> alles schliesen 2.) Projekt -> Typbibliothek importieren... 3.) Auswählen: Microsoft XML (Version 4) 4.) Unit anlegen klicken Bei Delphi 7 muss du ggf noch die Unit Variants in die Uses-Liste aufnehmen. |
Re: http GET Request per TSocket senden und Response empfang
da ich jede Version bis auf die 4er habe, muss ich mir die wohl holen um das zu testen :D
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:55 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