2015-10-16 1240 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 

在該代碼塊中,當我運行完整腳本時出現錯誤。當我去到實際下載種子,我得到:Python請求獲取('Connection aborted。',BadStatusLine(「''」,))錯誤

('Connection aborted.', BadStatusLine("''",)) 

我只貼的代碼,我認爲相關的上述塊。整個腳本在下面。它來自於pantuts,但我不認爲它已經保存了,我試圖用python3來運行它。從我的研究中,錯誤可能意味着我使用http而不是https,但我已經嘗試了兩種。

Original script

+0

你可以提供一個示例url在哪裏發生? – TobiMarg

+0

您粘貼的代碼缺少'try'。我得到了一個不同的錯誤:'('連接中止。',RemoteDisconnected('無響應的遠端關閉連接'))'希望有一個更具描述性的錯誤可以幫助你。 – sorbet

+0

hmm。運行時腳本不給我的網址只是洪流的名字,所以我不能發佈一個示例url。我剛剛搜索了學習python並選擇了第一個洪流。我不確定你錯過了什麼意思。你能詳細說明嗎?謝謝你的幫助。 – eurabilis

回答

28

你得到的錯誤表示主機沒有在預期的方式響應。在這種情況下,這是因爲它檢測到您正試圖抓取它並故意斷開您的連接

如果您在測試網站上嘗試使用此網址的requests代碼:http://mirror.internode.on.net/pub/test/5meg.test1,您會看到它正常下載。

爲了解決這個問題,假冒你的user agent您的用戶代理可識別您的網絡瀏覽器,而且網絡主機通常會檢查它以檢測漫遊器。

使用headers字段來設置您的用戶代理。這是一個告訴webhost你是Firefox的例子。

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) 

Web主機有很多其他方式來檢測殭屍程序,但用戶代理是最簡單和常見的檢查之一。如果你想讓你的刮刀更難察覺,你可以試試ghost.py