Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi http GET Request per TSocket senden und Response empfangen (https://www.delphipraxis.net/148462-http-get-request-per-tsocket-senden-und-response-empfangen.html)

jokerfacehro 2. Mär 2010 12:10


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:

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;
allerdings bekomme ich keine antwort vom server.
sieht mein Get-String falsch aus ? oder woran kanns liegen.

die sockets funktionieren auf jedenfall und internet ist auch vorhanden, ohne proxy

sirius 2. Mär 2010 12:17

Re: http GET Request per TSocket senden und Response empfang
 
http erwartet am Ende eine Leerzeile

jokerfacehro 2. Mär 2010 12:20

Re: http GET Request per TSocket senden und Response empfang
 
Delphi-Quellcode:
str:='GET /download/index.php HTTP/1.1'+#13#10+'Host: blumenhund.afischi.de'+#13#10+#13#10;
hat keinen erfolg gebracht


Edit:

Delphi-Quellcode:
str:='GET /download/index.php HTTP/1.1\r\nHost: blumenhund.afischi.de\r\n\r\n';
geht auch nicht

sirius 2. Mär 2010 12:31

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.

Phoenix 2. Mär 2010 12:38

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

jokerfacehro 2. Mär 2010 12:48

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.

sirius 2. Mär 2010 13:10

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;

jokerfacehro 2. Mär 2010 14:35

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

sirius 2. Mär 2010 15:02

Re: http GET Request per TSocket senden und Response empfang
 
Delphi-Quellcode:
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.
Macht. Müsste aber auch über Messages gehen.

jokerfacehro 2. Mär 2010 15:08

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.
Seite 1 von 2  1 2      

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