Funkcja send - string i char

0

Chcę wysłać dane przez GET za pomocą socketów, więc:

Buffer: array[0..1024] of char;
...
Buffer := 'GET /skrypt.php? / HTTP/1.1'+#13#10+
    'TE: deflate,gzip;q=0.3'+#13#10+
    'Connection: TE, close'+#13#10+
    'Host: www.adres-strony.pl'+#13#10+
    'User-Agent: WinSock Delphi'+#13#10+#13#10;
...
send(Gniazdo, Buffer, SizeOf(Buffer), 0);

Super, działa.

Ale muszę przekazać dane do GET, więc próbuje:

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

Nie kompiluje się. Potem próbuje:

Buffer, dane: string;
Buffer := 'GET /skrypt.php?' + dane + ' / HTTP/1.1'+#13#10+
...
send(Gniazdo, Pchar(Buffer), SizeOf(Buffer), 0);

Kompiluje się, ale skrypt się nie wykonuje.

Próbowałem stringa dane przepisać do tablicy, a potem te tablice złączyć do Buffer, kompiluje się, ale nie działa.

Jak przekazać, dokleić dane do GET'a? Moje dane są stringiem.

Jak wpiszę ręcznie to działa:

Buffer := 'GET /skrypt.php?info1=a&info2=b&info3=c / HTTP/1.1'+#13#10+
0

Spróbuj zmienić typ zmiennej Buffer na PChar i przy koneksji z danymi, ciągle rzutuj np.

// załóżmy że Ganiazdo jest globalem
var
Buffer: PChar;
Dane: string;

Buffer := PChar('Jakies dane zal dupadupadupa ' + Dane + '...');
send(Gniazdo, Buffer, SizeOf(Buffer), 0);

@Edit: Jeśli nie jesteś pewien czy skrypt się poprawnie wykonuje używaj czujek (Watch'y) na bufor.

0

send(Gniazdo, Buffer, SizeOf(Buffer), 0);

A figę!

send(Gniazdo,Buffer[1],length(buffer),0); - buffer jako string/ansistring. Powinno działać

0

Niestety nic z tego... w Pchar próbowałem nawet bez danych wysłać zapytanie i nie wykonuje się...

123 nie zauważyłem twojego postu podczas pisania odpowiedzi.

Twój sposób zadziałał.

Wielkie dzięki! ;)

0

A ja na przyszłość polecam, jeżeli nie ogarniasz socketów samodzielnie, wspomóc się gotowym rozwiązaniem, które świetnie działa i jest na: http://piechnat.pl/article/simpletcp.html bo ja też sam nie umiałem "rzeźbić" w socketach od zera, więc wykorzystałem ten moduł i to nie raz, w swoich programach - downloaderach dostępnych pod adresem w mojej sygnaturce i do nieszyfrowanego protokołu HTTP moduł SimpleTCP sprawdził się bardzo dobrze.

0

ja też sam nie umiałem "rzeźbić" w socketach od zera

no to dlaczego nie pójść dalej i nie zrobić tego w jakimś komponencie HTTP? Np. Synapse jest bardzo dobre, nie muszę się martwić o praktycznie nic.. Nie widzę sensu.

0
-pB_No- napisał(a):

ja też sam nie umiałem "rzeźbić" w socketach od zera

no to dlaczego nie pójść dalej i nie zrobić tego w jakimś komponencie HTTP? Np. Synapse jest bardzo dobre, nie muszę się martwić o praktycznie nic.. Nie widzę sensu.

Ponieważ kilka programów chciałem napisać w czystym WinAPI. Poza tym plik pobierany po HTTP przez SimpleTCP może zwiększać swój rozmiar przyrostowo, na czym mi też wtedy zależało, a komuś innemu też może zależeć. Ale pod VCL się zgadzam - Synapse i.

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