Python urllib ilə proksidən fayla yükləməni axınlaşdırın
Proksidən yükləməni müvəqqəti fayla axın kimi köçürün və son fayl adını yalnız kopyalama bitdikdən sonra elan edin.
import os
import shutil
from urllib.request import ProxyHandler, build_opener
proxy = 'http://proxy.example.net:8080'
opener = build_opener(ProxyHandler({
'http': proxy,
'https': proxy,
}))
temporary = 'archive.zip.part'
destination = 'archive.zip'
with opener.open('https://downloads.example.net/archive.zip',
timeout=20) as response:
with open(temporary, 'wb') as output:
shutil.copyfileobj(response, output)
os.replace(temporary, destination)URL-ləri və fayl adlarını tətbiq üçün dəyişdirin. Proksi autentifikasiyası olmadan icazə verilən ictimai fayl yükləməsi üçün HTTP proksi siyahısı proksi URL-i üçün namizəd son nöqtələr verə bilər. Bu xüsusi urllib açıcısı HTTPS hədəfi üçün normal sertifikat yoxlaması ilə HTTP proksisindən istifadə edir. Qlobal açıcı quraşdırmır; lazım olduqda autentifikasiya onun dəstəklənən quruluşunu tələb edir.
copyfileobj hissə-hissə kopyalayır. Fayl kontekstindən çıxmaq onu bağlayır və os.replace son adı quraşdırmazdan əvvəl buferlənmiş yazmaları boşaldır.
Sorğu və ya kopyalama xəta qaldırarsa, adlandırma atlanır. Təmizləmə siyasəti üçün qismən fayl qala bilər və bu axın həmin uğursuzluqda mövcud son fayla toxunmadan qoyur. Uğur halında əvəzləmə həmin son faylın üzərinə yaza bilər, ona görə siyasəti qəsdən seçin.
Eyni vaxtda işlər üçün unikal müvəqqəti adlardan istifadə edin. Ayrı açıcı obyektləri eyni .part yolunu paylaşan işləri qorumur.
20 saniyəlik parametr ümumi yükləmə vaxtını deyil, dəstəklənən soket əməliyyatlarını məhdudlaşdırır. Bütün iş üçün son tarix ayrıca tətbiq idarəetməsi tələb edir. Köçürmənin tamamlanması da yüklənmiş faylın yoxlanmasından ayrıdır.