with session.get(url, stream=True, proxies=routes,
                 timeout=(5, 30)) as response:
    response.raise_for_status()
    with open(part_path, 'wb') as output:
        for chunk in response.iter_content(chunk_size=64 * 1024):
            if chunk:
                output.write(chunk)

Χρησιμοποιήστε αυτό το μοτίβο με την υπάρχουσα συνεδρία Requests της εφαρμογής, τις διαδρομές του διακομιστή μεσολάβησης, το URL και την προσωρινή διαδρομή εξόδου. Για μια δημόσια διαδρομή HTTP, η λίστα διακομιστών μεσολάβησης HTTP παρέχει υποψήφιες διευθύνσεις για την αντιστοίχιση σας. Το μοτίβο ροής καταναλώνει το σώμα σταδιακά αντί να αποκτήσει response.content και μετά να γράψει ένα δεύτερο αντικείμενο πλήρους μεγέθους.

Διατηρήστε αυτή την ιδιότητα καθ' όλη τη λήψη: το stream=True αναβάλλει το σώμα, αλλά η πρόσβαση στο response.content στη συνέχεια μπορεί ακόμη να το συγκεντρώσει όλο στη μνήμη. Το μέγεθος τεμαχίου του iter_content είναι προτίμηση ανάγνωσης, όχι αίτημα για κωδικοποίηση μεταφοράς HTTP κατά τεμάχια στον ιστότοπο ή στον διακομιστή μεσολάβησης.

Ο διαχειριστής περιβάλλοντος της απάντησης κλείνει την απάντηση ακόμη και αν μια εγγραφή αποτύχει ή η εφαρμογή σταματήσει νωρίς. Το ενδεικτικό ζεύγος χρονικών ορίων δεν είναι προθεσμία πραγματικού χρόνου για ολόκληρη τη μεταφορά· ορίστε την πολιτική διάρκειας ζωής της λήψης ξεχωριστά όπως απαιτείται.

Μετά την επιτυχή κατανάλωση, ελέγξτε το τεχνούργημα που αναμένει η εφαρμογή πριν δημοσιεύσετε το τελικό του όνομα. Σε διακοπή, κρατήστε το μερικό αρχείο μόνο υπό σκόπιμη πολιτική συνέχισης, με μεταδεδομένα που προσδιορίζουν την απομακρυσμένη αναπαράσταση. Ένα μη κενό προσωρινό αρχείο δεν είναι επιτυχής λήψη.

Σχετικά άρθρα