2017-04-07 11 views
1

問題はダウンローダでダウンロードしたファイルが完了し、このリンク
https://i1.pixiv.net/img-zip-ugoira/img/2017/04/05/00/24/41/62259492_ugoira600x600.zipなぜ、このコードは、ファイルをダウンロードしないと、ダウンローダが正常に

で始まり、それをダウンロードすることができます。

enter image description here

と私はそれが動作しない

from urllib import request 
import sys 
request.urlretrieve('https://i1.pixiv.net/img-zip-ugoira/img/2017/04/05/00/24/41/62259492_ugoira600x600.zip', '123.zip') 


Traceback (most recent call last): 
    File "C:/Users/ssshooter/PycharmProjects/first/111.py", line 3, in <module> 
    request.urlretrieve('https://i1.pixiv.net/img-zip-ugoira/img/2017/04/05/00/24/41/62259492_ugoira600x600.zip', '123.zip') 
    File "C:\Users\ssshooter\AppData\Local\Programs\Python\Python36\lib\urllib\request.py", line 248, in urlretrieve 
    with contextlib.closing(urlopen(url, data)) as fp: 
    File "C:\Users\ssshooter\AppData\Local\Programs\Python\Python36\lib\urllib\request.py", line 223, in urlopen 
    return opener.open(url, data, timeout) 
    File "C:\Users\ssshooter\AppData\Local\Programs\Python\Python36\lib\urllib\request.py", line 532, in open 
    response = meth(req, response) 
    File "C:\Users\ssshooter\AppData\Local\Programs\Python\Python36\lib\urllib\request.py", line 642, in http_response 
    'http', request, response, code, msg, hdrs) 
    File "C:\Users\ssshooter\AppData\Local\Programs\Python\Python36\lib\urllib\request.py", line 570, in error 
    return self._call_chain(*args) 
    File "C:\Users\ssshooter\AppData\Local\Programs\Python\Python36\lib\urllib\request.py", line 504, in _call_chain 
    result = func(*args) 
    File "C:\Users\ssshooter\AppData\Local\Programs\Python\Python36\lib\urllib\request.py", line 650, in http_error_default 
    raise HTTPError(req.full_url, code, msg, hdrs, fp) 
urllib.error.HTTPError: HTTP Error 403: Forbidden 

ファイルをダウンロードするのpythonを使用してみてください。

+1

おそらくもっと少ない写真とコードが必要だと思いますか?それは私が「なぜこのコードはファイルをダウンロードしないのですか?ここには1つのコード例しかないので –

+0

あなたのスニペットで答えがあります: 'HTTP Error 403:Forbidden' –

+0

@ kpa6uk Downloader(例:IDM)は完全なファイルをどのようにダウンロードできますか? –

答えて

1

違いは次のとおりです。

  1. あなたは別のSSL情報を使用している:あなたしているブラウザが組み込まれている認証局のセット。 PythonはOSに付属のセットを使用します。あなたがアクセスしようとしているサイトがあなたのブラウザには知られているが、Pythonには知られていない場合は、&が違うので、Pythonは例外をスローします。
  2. 異なるユーザーエージェントを使用してアクセスしています。あなたのブラウザは、それがChromeかIEか何かをサーバーに伝えています。 PythonはサーバにPythonを伝えています。どんな理由であれ、サーバーはそれが好きではないと判断して、禁止を返します。
  3. サーバーはあなたが思っているよりも懸命に動作している可能性があります。要求が単純なファイルの場合は、本当にリソースを要求しています。あなたのブラウザで正常に実行されたサーバとあなたのブラウザ(クッキー、javascriptなど)間の複数のやりとりを要求しているリソースがサーバ&に返されたとします(この場合はありそうもありませんが)ファイルを配信します。あなたのPythonリクエストはそれを実行していません。
  4. あなたのブラウザには、あなたのPythonがない既存の状態があります。あなたはあなたのブラウザを使ってファイルにアクセスすることができると言いますが、サイト上の他のリソースにアクセスしたり、ログインしたりしているためにのみ動作します。あなたのブラウザは、その情報を(おそらくcookie経由のsession_id?)サーバが認識していることを認識しています。あなたのPythonコードは以前の状態がないので、サーバーはそれを禁じます。

この場合、どちらですか?調査する必要があります。 wgetやcurlを動かすことはできますか?ブラウザのアクセスをデバッグしてください:どのヘッダが送られているのですか、何を返信していますか?

+0

ありがとう!私はブラウザがファイルの一部をキャッシュしてブラウザが不完全なファイルをダウンロードできるようになったと思いますが、どのようにダウンローダが完全なファイルをダウンロードできますか? –

+0

ダウンローダ(例:IDM) –

+0

@ ZhouTK、いいえ、ブラウザはそのようにダウンロードするために部分ファイルをキャッシュしません。 IDMは実際にはHTTP、HTTPS、FTPなどを理解し、組み込みの再試行などを持つマルチプロトコルプログラムです。「ブラウザ」と「単純なPython要求」の間の機能を備えています。 – pbuck

関連する問題