Փոխանցեք gzip բայթերը դրանք նկարագրող վերնագրերով
Ընտրեք կոդավորված կամ վերծանված բեռնվածք Requests-ի վրա հիմնված պրոքսիում, ապա տվեք ներքևի պատասխանին համապատասխան content վերնագրեր և իր սեփական շրջանակավորումը։
Եթե 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 սխալների հետ պրոքսի պայմանագրի համաձայն. այս օրինակը դրանք նետում է փոխանցելու փոխարեն։