Егер Requests денені әлдеқашан ашса, оны Content-Encoding: gzip-пен жіберу келесі клиенттен оны қайта ашуын талап етеді. Тақырыпшаларды көшіру алдында прокси қандай жүктеме көрінімін жіберетінін шешіңіз.

Жіберілген жүктемеContent тақырыпшалары
Бастапқы кодталған байттарҚолданылатын кодтауды және жүктеменің нақты ұзындығын сақтаңыз
Декодталған байттарДекодталған кодтауды алып тастаңыз; сәйкес ұзындықты алып тастаңыз немесе қайта есептеңіз

Кодталған жүктеме байттары үшін бұл үзінді urllib3-тің шикі ағынын content декодтауынсыз оқиды:

with requests.get(url, stream=True, timeout=(5, 30)) as upstream:
    upstream.raise_for_status()
    for block in upstream.raw.stream(65536, decode_content=False):
        downstream.write(block)

downstream — бұл қолданыстағы жауап шығысы. Оның күйі мен тақырыпшалары таңдалған саясатқа бұрыннан сай болуы керек; бұл үзінді толық прокси серверін іске асырмайды.

Тасымалдау кадрлауы gzip content кодтауынан бөлек. Жоғарғы HTTP кітапханасы кадрлауды, соның ішінде бөліктерді жоюды, әлдеқашан өңдеді, сондықтан Transfer-Encoding-ті соқыр көшірмеңіз. Төменгі сервер жүктеме gzip-пен кодталған күйде қалса да өз жауабын кадрлайды.

response.text және одан кейінгі UTF-8 кодтауы да көріністі өзгертеді және ерікті екілік деректерді сақтай алмайды. Әр жолда жоғарғы жауапты жабыңыз немесе тұтыныңыз және HTTP қателерін прокси шартына сәйкес өңдеңіз: бұл мысал оларды жіберудің орнына лақтырады.

Қатысты мақалалар