stream=True позволяет начать обработку до того, как тело ответа через прокси будет загружено полностью. Для CSV передайте итератор текстовых строк в csv.reader, чтобы разделители внутри кавычек и многострочные записи оставались данными CSV.

Для иллюстративного файла UTF-8 с точками с запятой:

import csv
import requests

routes = {'https': 'http://proxy.example:8080'}
with requests.get(
    'https://data.example/observations.csv',
    proxies=routes,
    stream=True,
    timeout=(5, 30),
) as response:
    response.raise_for_status()
    response.encoding = 'utf-8'
    lines = (
        line + '\n'
        for line in response.iter_lines(
            chunk_size=65536, decode_unicode=True)
    )
    for record in csv.reader(lines, delimiter=';'):
        if record and record[0] == 'wanted':
            print(record)
            break

Выберите фактическую кодировку и диалект файла. Для публичного скачивания CSV по разрешённому публичному прокси-маршруту список HTTP-прокси предлагает кандидатов для URL routes. Эта версия нормализует физические окончания строк в LF: iter_lines удаляет их, а генератор добавляет обратно перевод строки для парсера CSV. Это важно, когда поле в кавычках продолжается на другой физической строке.

Для рабочих процессов, требующих побайтового сохранения встроенных символов CRLF, используйте потоковую текстовую обёртку, сохраняющую эти окончания строк. Намеренная нормализация в примере подходит для обработки, ориентированной на записи, где LF — желаемое представление.

Один ответ, много чтений

Итератор потребляет фрагменты одного HTTP-ответа. Он не отправляет новый запрос для каждой строки. Запросы HTTP Range — другой механизм, и они не определяют границы записей CSV естественным образом.

Вызов response.text или сбор всех строк в список вернул бы всё содержимое обратно в память. Потоковой обработке всё равно нужно место для транспортных буферов и текущей записи, которая сама может содержать большое поле.

Контекст ответа закрывает тело при выходе из цикла, в том числе при раннем совпадении. Тайм-аут чтения ограничивает ожидание входящих данных, а не общее время передачи большого файла.

Похожие статьи