Requests ve iter_content ile proxy üzerinden indirme
Requests yanıtını, olağan durum denetimlerini, temizliği ve kısmi çıktı için bilinçli bir politikayı koruyarak adım adım tüketin.
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)
Bu deseni uygulamanın mevcut Requests oturumu, proxy rotaları, URL ve geçici çıktı yolu ile kullanın. Genel bir HTTP rotası için HTTP proxy listesi, proxy eşlemeniz için aday adresler sağlar. Akış deseni, response.content değerini alıp ardından ikinci bir tam boyutlu nesne yazmak yerine gövdeyi adım adım tüketir.
Bu özelliği indirme boyunca koruyun: stream=True gövdeyi erteler, ancak sonradan response.content erişimi yine de tamamını bellekte toplayabilir. iter_content öğesinin parça boyutu bir okuma tercihidir; web sitesinde veya proxy'de HTTP parçalı aktarım kodlaması talebi değildir.
Yanıtın bağlam yöneticisi, bir yazma başarısız olsa veya uygulama erken dursa bile yanıtı kapatır. Örnekteki zaman aşımı çifti, tüm aktarım için gerçek bir son tarih değildir; gerektiğinde indirmenin yaşam süresi politikasını ayrıca ayarlayın.
Başarılı tüketimden sonra, son adı yayımlamadan önce uygulamanın beklediği çıktıyı denetleyin. Kesinti olursa, kısmi dosyayı yalnızca bilinçli bir sürdürme politikası altında tutun; uzak temsili tanımlayan üst verilerle birlikte. Boş olmayan bir geçici dosya başarılı bir indirme değildir.