idHTTP przyśpieszanie GET i POST

Odpowiedz Nowy wątek
2011-07-30 22:32
Maxikq
0

Potrzebuję przyśpieszyć wywoływanie GET i POST. Przykładowo POST trwa 2,5s, bo pobiera content, który nie jest mi potrzebny.

Robię:

idHTTP1.Request.ContentRangeStart:=5;
idHTT{1.Request.ContentRangeEnd  :=6;

ale to nie działa... sniffuje ruch w sieci i header jest dobrze ustawiony: "Range: bytes=5-6", a mimo wszystko pobiera całość.

Wie ktoś jak rozwiązać ten problem?

Umm, metoda HEAD? - O_o 2011-07-30 22:48

Pozostało 580 znaków

2011-07-30 23:15
Maxikq
0

Dzięki, Head się świetnie sprawdza, ale też potrzebuje pobrać tylko kilkaset pierwszych bajtów, a range nie działa jak trzeba.

Uh, nie da się edytować posta.

Zapomniałem napisać, że chodzi mi głównie o metodę POST. Po wysłaniu POST otrzymuję długi Content, z którego potrzebuje tylko kilkaset bajtów, a takto pobiera całość i to trwa za długo, muszę to przyśpieszyć.

Pozostało 580 znaków

2011-07-31 02:22
O_o
0

Hmm, w teorii w Indy się to da zrobić. W praktyce jak widać są problemy ;)
Przesiądź się na Synapse to powinny się dać wszystko, z tym to Olesio Ci pomoże jak ładny temat założysz


O̾..͠o
edytowany 1x, ostatnio: O_o, 2011-07-31 02:23

Pozostało 580 znaków

2011-07-31 02:55
0

Pod Synapse można spróbowac, ale z tego co pisałem w swoim artykule wzorując się na dokumentacji projektu, to nie wiem czy się da to zrobić tak jak chcesz. Bo dokumentacja Synapse wyraźnie wskazuje, że do nagłówka nie można wstawić wielkości dokumentu, napisałem o tym w artykule na: Obsługa protokołu HTTP przy użyciu pakietu Synapse - ja za to mogę polecic opinię MiśkaD, którego poproszę aby spojrzał na ten wątek. Jednak wydaje mi się, że Synapse również będzie pobierać całość zwróconego kodu html lub pliku do własności Document (TMemoryStream) i jeżeli taka operacja trwa dłużej, bo plik jest duży to można ewentualnie pokazać tego przebieg, ale chyba nic więcej się nie da zrobić, chociaż co do tego nie jestem pewny.


Zapomniałeś dopisać "może ktoś inny Ci tu coś pomoże" :) - TomRiddle 2011-07-31 18:07

Pozostało 580 znaków

2011-07-31 03:11
0

A ja bym to zrobił lekko zmieniając kod, tak aby przy pobraniu pakietu można było wybrać czy połączenie ma być kontynuowane czy nie, a gdy pobiorę wszystko co chcę, po prostu zamknął połączenie na chama :P .


Nie pisz do mnie PM o czymś co nie dotyczy bezpośrednio mnie. | Nie rozmawiaj ze mną jeśli brak Ci kultury (wystarczy że mi brakuje) | Nie jestem zły, jestem po prostu zły.

Pozostało 580 znaków

2011-07-31 13:06
0

Content-Range działa tylko z HTTP 1.1 - sprawdź czy serwer, do którego chcesz się dostać go obsługuje.
Zobacz jeszcze to http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
edytowany 1x, ostatnio: Misiekd, 2011-07-31 13:08

Pozostało 580 znaków

2011-07-31 17:33
0
payl napisał(a)

A ja bym to zrobił lekko zmieniając kod, tak aby przy pobraniu pakietu można było wybrać czy połączenie ma być kontynuowane czy nie, a gdy pobiorę wszystko co chcę, po prostu zamknął połączenie na chama :P .

Na to samo wpadłem i faktycznie pomaga, w zdarzeniu OnWork wywołuje idHTTP.Disconnect, gdy już odczytamy ileś tam bajtów.
Tylko znowu z tym jest taki problem, że musimy pobierać od początku, ale w zasadzie załatwia mój problem.

Misiekd napisał(a)

Content-Range działa tylko z HTTP 1.1 - sprawdź czy serwer, do którego chcesz się dostać go obsługuje.
Zobacz jeszcze to http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35

Obsługuje HTTP 1.1. Przejrzę sobie jeszcze ten artykuł i dam znać czy coś z tego mogło.

Są też serwery które z przeróżnych powodów nie obsługują content range. - O_o 2011-07-31 17:44
"Tylko znowu z tym jest taki problem, że musimy pobierać od początku" - A co od tyłu byś chciał? Są serwery które po zapytaniu od któregoś bajta rzeczywiście zrealizują to od któregoś bajta, ale na niektórych jest to zablokowane a zresztą nie wiem czy się opłaca pomijać pierwsze pare bajtów ... - payl 2011-07-31 19:39
"a zresztą nie wiem czy się opłaca pomijać pierwsze pare bajtów" No aktualnie wystarcza mi to jak pobieram od początku. Ale z ciekawości się zastanawiam czemu nie działa to Range. Wydaje mi się, że właśnie wina leży po stronie serwera. - Max1414 2011-07-31 22:11
Wyślij HEAD z ustawionym Content Range, w teori server powinien zwrócić 206 Partial Content. Możesz to zrobić rećznie przez telneta ;) - O_o 2011-07-31 22:20

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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