Winsock - wysyłanie danych, tablica char

0

Chcę przesłać dane metodą GET za pomocą Winsock'a.

Znazłem kod odpowiedzialny za wysyłanie na forum:

var
wsa : WSAData;
ErrorCode : Integer;
Adr: String ;
Gniazdo : Integer;
socket_info: sockaddr_in;
Handle : THandle;
Buffer :  array[0..1024] of char;

begin
adr := '--adres IP do strony--';
ErrorCode := WSAStartup(MAKEWORD(2,0),wsa);

Gniazdo := Socket(AF_INET, SOCK_STREAM, 0);
socket_info.sin_family := AF_INET;
socket_info.sin_addr.S_addr := inet_addr(PChar(Adr));
socket_info.sin_port := htons(80);
ErrorCode := connect(Gniazdo, socket_info, SizeOf(socket_info));

WSAAsyncSelect(Gniazdo,Handle,WM_USER, FD_READ or FD_CONNECT or FD_ACCEPT);

Buffer := 'GET /skrypt.php? / HTTP/1.1'+#13#10+
    'TE: deflate,gzip;q=0.3'+#13#10+
    'Connection: TE, close'+#13#10+
    'Host: www.jakastrona.pl'+#13#10+
    'User-Agent: WinSock Delphi'+#13#10+#13#10;
 
send(Gniazdo, Buffer, SizeOf(Buffer), 0);
Recv(Gniazdo, Odebralem, SizeOf(Odebralem), 0);
end;

Mianowicie chodzi mi o tą część kodu:

Buffer := 'GET /skrypt.php? / HTTP/1.1'+#13#10+
    'TE: deflate,gzip;q=0.3'+#13#10+
    'Connection: TE, close'+#13#10+
    'Host: www.jakastrona.pl'+#13#10+
    'User-Agent: WinSock Delphi'+#13#10+#13#10;

Przesyłane dane muszą być w tablicy char. Założmy, że wpiszę ręcznie dane:

Buffer := 'GET /skrypt.php?dane1=abc&dane2=def&dane3=ghi / HTTP/1.1'+#13#10+
...
...
...
...

Skrypt wykona się, dane zostaną przesłane.

Ale nie mogę wpisać ręcznie tych danych. Dane do przekazania mam w zmiennej:

var 
dowyslania:string;
begin
dowyslania := 'dane1=abc&dane2=def&dane3=ghi'

Teraz wpisuję:

Buffer := 'GET /skrypt.php?'+dowyslania+' / HTTP/1.1'+#13#10+
...
...
...
...

Wyrzuca błędy, że złe typy. Nie można mieszać chara ze stringiem, więc próbowałem stringa zapisać do nowej tablicy i tablice ze sobą skleić:

var 
dowyslania:string;
tablica:array[0..512] of char;
i:integer;
begin
dowyslania := 'dane1=abc&dane2=def&dane3=ghi'
for i:=0 to length(dowyslania) do tablica[i] := dowyslania[i];

Podstawiłem:

Buffer := 'GET /skrypt.php?'+tablica+' / HTTP/1.1'+#13#10+
...
...
...
...

Również błędy...

Skleiłem obie tablice ręcznie w nowej tablicy i skrypt się nie wykonuje.
Nie mam już pojęcia co może być źle, dlatego piszę na forum.

Jakieś pomysły?

0

za malo kombinujesz.

var 
  dowyslania:string;
  tablica:array[0..512] of char;
  calosc:String;
  i:integer;
begin
  dowyslania := 'dane1=abc&dane2=def&dane3=ghi'
  calosc := 'GET /skrypt.php?'+dowyslania+' / HTTP/1.1'+#13#10+ //skoro nie mozesz laczyc dwoch tablic to polacz dwa stringi
  ...

  for i:=0 to length(calosc) do //a dopiero potem zamien polaczone stringi na tablice
      tablica[i] := calosc[i];
0

Heh... też próbowałem i nie działa niestety.

1 użytkowników online, w tym zalogowanych: 0, gości: 1