Jak pobrac tylko 30 bajtow uzywajac synapse http

0

Jak pobrac tylko 30 bajtow uzywajac synapse, http .. oto prosty kod :

procedure pobierz;
var
http:THTTPSend;
doc:TStringList;
begin
http:=THTTPSend.Create; doc:=TStringList.Create;
http.HTTPMethod('GET','mojadomena.com/plik.txt');
doc.LoadFromStream(http.Document); end;

chce pobrac tylko 30 pierwszych bajtow.

dzieki za pomoc.

0
  1. serwer MUSI obsługiwać HTTP/1.1
  2. trzeba odpowiednio ustawić Headers wg tego http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35
0

Robiłem tym sposobem i wszystko ok, ale chce to zrobic inaczej bez wymaganej obslugi HTTP 1.1 i ustawiania headers.

0

inaczej się nie da

0
Misiekd napisał(a)

jemu chyba chodzi o zwykłe rozłączenie się po pierwszych 30 bajtach więc jak może się nie dać? co to za trefna biblioteka?

tak o to mi chodzi.

0

tak o to mi chodzi.

No to sobie dopisz hooki które rozłączą po 30 bajtach. Masz updejta gdy pobiera, jeżeli przekroczy 30 bajtów to rozłączasz, a potem odrzucasz to co pobrał nadprogramowo. Poczytaj tutki, poeksperymentuj itd. W czym masz problem?

BTW. Tak się nie powinno robić, generalnie nie powinieneś zamykać sesji dopóki nie odbierzesz danych >.> Dlatego Misiked proponował ci range (ale ty oczywiście nie możesz modyfikować nagłówków, może jeszcze programu nie możesz modyfikować?).

0
unikalna_nazw napisał(a)

jemu chyba chodzi o zwykłe rozłączenie się po pierwszych 30 bajtach więc jak może się nie dać? co to za trefna biblioteka?
jak napiszesz mi kod, który z przesyłanego pakietu o długości np. 200B pobierze pierwsze 30 to Ci 0,7 postawie o ile przedstawisz dowód, że pełnoletni jesteś.

dajjjj333 napisał(a)

tak o to mi chodzi.
chodzić to Ci może. HTTP ma pewne zasady i standardy i jak Ci się nie podoba to pobieraj inaczej - ftp np. Tam zrobisz co i jak będziesz chciał.
HTTP JEDYNIE w wersji 1.1 pozwala na pobranie części pliku przez odpowiednie ustawienie nagłówka dla GET.

0

Ech, Misiek chciał Ci zgodną z protokołami metodę podać, a ja ślęczałem nad kodem, bo źle mi działał. Może są jeszcze jakies inne błędy. Da się zrobić to co chcesz i nawet mój program pobiera te 30 bajtów. Robi to na poziomie Socketów i korzysta z modułu SimpleTCP. Przeanalizuj i ewentualnie przerób sobie ten kod dla swoich potrzeb, bo mogą być jakieś błędy, ponieważ pisałem to na szybko, a zaraz idę spać, bo rano do roboty trzeba wstać. Heh, do rymu :) Nie analizowałem pakietów, ale Socket odczyta dokładnie tyle według mnie, czyta bufor po jednym bajcie, ale to konieczne by odczytać bardzo małe rozmiary jak 30 bajtów. Z onetem się coś pluje o underscore w adresie i źle przekierowuje, bo ja na szybko wklejałem kod z użyciem SimpleTCP z moich innych downloaderów w WinAPI, gdzie on działa, ale idealnie obsługi protokołu HTTP nie odzwierciedliłem, więc pokombinuj dalej sam i ewentualnie popraw to co jest nie tak. Ja idę spać, bo późna pora i nie mam siły nad tym siedzieć już. Może Misiekd naprostuje moje błedy jak będzie miał ochotę i czas.

0

dzięki za ten kod działa, ale wolałbym użyć do tego synapse gdyż cały program przy którym już chwilę siedzę korzysta tylko z synapse..

0

No to musisz się zastosować do porad Miśkad. Na przykład w Synapse nie da się bez bardzo znacznych przeróbek pobierac plik przyrostowo tak aby zapisywany na dysku plik dynamicznie się zwiększal, ale można to zrobić właśnie z użyciem tego modułu SimpleTCP - autorstwa Mateusza Piechnata. Poza tym pod SimpleTCP masz większą kontrolę nad tym co się dzieje. Przecież możesz, jeśli chcesz, do wszystkiego użyć Synapse, a konkretnie tylko do tej rzeczy zaprzęgnąć SimpleTCP.

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