Gdy pobrany plik zaczyna się od wiersza statusu HTTP
Nie dopuszczaj, aby obramowanie odpowiedzi HTTP trafiło do pobranego artefaktu; zamiast kopiować każdy bajt odebrany z gniazda proxy do pliku wyjściowego.
Jeśli rzekomy PDF lub arkusz kalkulacyjny zaczyna się od HTTP/1.1 200 OK, downloader zapisał surową odpowiedź zamiast artefaktu. Ta schematyczna odpowiedź zawiera tylko cztery bajty treści:
HTTP/1.1 200 OK
Transfer-Encoding: chunked
4
DATA
0
Artefaktem jest DATA. Wiersz statusu, nagłówki, znacznik rozmiaru i struktura kończąca należą do HTTP. Usuwanie stałej liczby bajtów jest niebezpieczne, ponieważ długości nagłówków się różnią. Skopiowanie wszystkiego po pierwszym pustym wierszu nadal pozostawia obramowanie fragmentów, a odpowiedzi informacyjne mogą poprzedzać odpowiedź końcową.
W przypadku zwykłego pobierania zastąp kopiowanie z surowego gniazda do pliku interfejsem treści odpowiedzi klienta HTTP. Skonfiguruj jego proxy, sprawdź końcowy status i przesyłaj strumieniowo treść do tymczasowego wyjścia. Klient obsługuje obramowanie komunikatu: treści o określonej długości, dzielone na fragmenty (chunked) i ograniczane przez połączenie wymagają innego parsowania.
Kodowanie treści to kolejna warstwa. Zdecyduj, czy potrzebujesz zdekodowanych bajtów artefaktu, czy jawnie żądanej surowej treści, korzystając z udokumentowanego zachowania klienta. Skompresowane bajty nie są automatycznie uszkodzeniem proxy.
Jeśli aplikacja musi zachować kod na poziomie gniazda, odpowiada za wszystkie te reguły parsowania oraz obsługę odczytu i zapisu. Zapisuj tylko liczbę bajtów faktycznie zwróconych przez odczyt, a nie pojemność bufora, i obsługuj częściowe zapisy. W przeciwnym razie nieaktualna zawartość bufora może uszkodzić nawet poprawnie wyodrębnioną treść.
HTTPS wymaga więcej niż usunięcia odpowiedzi CONNECT: po pomyślnym ustanowieniu tunelu należy zestawić TLS do celu, a następnie sparsować wewnętrzną odpowiedź HTTP. Zaszyfrowane bajty po nagłówkach proxy nie są plikiem do pobrania.
Nieudane lub niekompletne wyjście pozostaw pod nazwą tymczasową. Publikuj je dopiero po pomyślnym zakończeniu transferu i kontroli artefaktu; niepusty plik nie dowodzi kompletnego pobrania.