2015-10-16 10 views
16
def download_torrent(url): 
    fname = os.getcwd() + '/' + url.split('title=')[-1] + '.torrent' 
    try: 
     schema = ('http:') 
     r = requests.get(schema + url, stream=True) 
     with open(fname, 'wb') as f: 
      for chunk in r.iter_content(chunk_size=1024): 
       if chunk: 
        f.write(chunk) 
        f.flush() 
    except requests.exceptions.RequestException as e: 
     print('\n' + OutColors.LR + str(e)) 
     sys.exit(1) 

    return fname 

Bu kod bloğunda, tam komut dosyasını çalıştırdığımda hata alıyorum. Aslında torrent'i indirmeye gittiğimde, şu an alabildiğim kod bloğunu gönderdim: Python alma isteği ('Bağlantı iptal edildi.', BadStatusLine ("''",)) error

('Connection aborted.', BadStatusLine("''",)) 
Tüm komut dosyası aşağıda. Panterlerden geliyor, ama artık sürdüğünü sanmıyorum ve python3 ile koşmaya çalışıyorum. Araştırmamdan, hata https yerine http kullanıyorum anlamına gelebilir, ancak ikisini de denedim.

Original script

+0

Bunun olduğu yerde örnek bir url sağlayabilir misiniz? – TobiMarg

+0

Yapıştırdığınız kod bir "try" eksik. Farklı bir hata alıyorum: '('Bağlantı iptal edildi.', RemoteDisconnected ('Cevapsız Uzak uç kapalı bağlantı',))' Daha açıklayıcı bir hataya sahip olmanıza yardımcı olurum. – sorbet

+0

hmm. Çalışırken betik bana sadece url url vermez, bu yüzden örnek bir url gönderemiyorum. Sadece python öğrenmek için aradım ve ilk torrent'i seçtim. Bir deneyi kaçırmaktan ne demek istediğinden emin değilim. Detaylandırır mısın? Yardım ettiğin için teşekkür ederim. – eurabilis

cevap

28

Alacağınız hata konak beklenen şekilde yanıt vermiyor gösterir. Bu durumda, , onu kazımaya çalıştığınızı ve kasten bağlantısını kestiğinizi algıladığından dolayı olur.

requests kodunuzu bir test web sitesinden bu URL ile denerseniz: http://mirror.internode.on.net/pub/test/5meg.test1, normal olarak indirildiğini görürsünüz.

Bu konudan kurtulmak için, user agent numaranızı kullanın. Kullanıcı aracınız web tarayıcınızı tanımlar ve web sunucuları genellikle botları tespit etmek için kontrol eder. Kullanıcı aracınızı ayarlamak için headers alanını kullanın.

İşte webhost'a Firefox olduğunuzu söyleyen bir örnek. web için diğer pek çok yolu var

headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.0; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0' } 
r = requests.get(url, headers=headers) 

botlar algılamak barındıran, ancak kullanıcı aracısı en kolay ve yaygın kontrolleri biridir. Kazıyıcınızın tespit edilmesini zorlaştırmak istiyorsanız, ghost.py'u deneyebilirsiniz.