2017-07-21 4 views
0

いくつかの仮説があり、ここで多くの例と質問がありましたが、なぜ私がリクエストモジュールを使用してファイルをダウンロードできないのかわかりません。ダウンロードしようとしているmは唯一の10メガバイトの周りです:要求モジュールを使用してファイルをダウンロードすると空のファイルが作成される

try: 
    r = requests.get('http://localhost/sample_test', auth=('theuser', 'thepass'), stream=True) 
    with open('/tmp/aaaaaa', 'wb') as f: 
     for chunk in r.iter_content(chunk_size=1024): 
      f.write(chunk) 
except: 
    raise 

空のファイル:

[[email protected] ~]$ ls -ltra /tmp/aaaaaa 
-rw-rw-r--. 1 xxx xxx 0 Jul 21 12:38 /tmp/aaaaaa 

編集:私はちょうどそれがセッションの代わりに基本認証とAPIへの認証に必要だということを発見し、その情報はありませんでした仕様書に記載されています。上のコードは正しく動作します。私はこの質問を閉じるように投票しました。答えから

+0

が、これはHTTPSを参照してください。 com/questions/13137817/how-to-download-image-using-requests – efirvida

+0

ブラウザからそのファイルを問題なくダウンロードできますか?また、応答ヘッダーのチェックでも問題はありません。 – Himal

+0

@Himal私は、ファイルをダウンロードするためにAPIを使用するために、認証でセッションを開始する必要があることを発見しました。私は別の質問を開き、これを更新するつもりです。 –

答えて

0

のようなものを試してください:// stackoverflowのを:

import requests 

auth = 'http://localhost/api/login' 
payload = {'username': 'the_user', 'password': 'the_password'} 

with requests.Session() as session: 
    r = session.post(auth, data=payload) 
    if r.status_code == 200: 
     print('downloading') 
     get = session.get('http://localhost/sample_test', stream=True) 
     if get.status_code == 200: 
      with open('/tmp/aaaaaa', 'wb') as f: 
       for chunk in get.iter_content(chunk_size=1024): 
        f.write(chunk) 
    else: 
     print r.status_code 
0

here私は誰もがそれを必要とする場合には、ここに私の問題への解決策を追加している

import requests 

url = 'http://localhost/sample_test' 
filename = '/tmp/aaaaaa' 
r = requests.get(url, auth=('theuser', 'thepass'), stream=True) 

if r.status_code == 200: 
    with open(filename, 'wb') as f: 
     f.write(r.content) 
関連する問題