idHTTP przyśpieszanie GET i POST

idHTTP przyśpieszanie GET i POST
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ę:

Kopiuj
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?

OO
Umm, metoda HEAD?
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ć.

OO
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 13 lat
  • Postów:98
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
olesio
  • Rejestracja:około 17 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Szczecin
  • Postów:4191
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.


Pozdrawiam.
Riddle
Zapomniałeś dopisać "może ktoś inny Ci tu coś pomoże" :)
payl
  • Rejestracja:prawie 16 lat
  • Ostatnio:ponad 13 lat
  • Postów:196
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.
Misiekd
  • Rejestracja:ponad 21 lat
  • Ostatnio:prawie 13 lat
  • Postów:7923
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
Max1414
  • Rejestracja:około 19 lat
  • Ostatnio:około 9 lat
  • Lokalizacja:Wrocław
  • Postów:130
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.

OO
Są też serwery które z przeróżnych powodów nie obsługują content range.
payl
"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 ...
Max1414
"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.
OO
Wyślij HEAD z ustawionym Content Range, w teori server powinien zwrócić 206 Partial Content. Możesz to zrobić rećznie przez telneta ;)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.