Python3

python3 urllibプロキシ設定


概要

オライリーから出てる「ゼロから作るDeep Learning1.途中,MNISTの手書き文字ファイルをpythonを使ってダウンロードするのだが,うまく動いてくれない.次のようなエラーが出る2


TimeoutError: [WinError 10060] 接続済みの呼び出し先が一定の時間を過ぎても正しく

応答しなかったため、接続できませんでした。または接続済みのホストが応答しなかった

ため、確立された接続は失敗しました。


多分,プロキシのせい.

mnist.py3の中身を見るとurllibを使ってるので,多分,これにちゃんとプロキシを設定してやれば,解決できるはず.

ということで,urllibにどうやってプロキシを設定するのか調べた4

なお,ディープラーニングの本を読んでて本質的でないとこで引っかかっただけで,この記事ではディープラーニングに関する情報は一切書いていない.


やり方

まぁ,こういうのは大体,誰かが既にやっているもので,Stack Overflowでみつけることができた.

urllib.request.urlretrieve with proxy?

proxy = urllib.request.ProxyHandler({'http': '127.0.0.1'})

opener = urllib.request.build_opener(proxy)
urllib.request.install_opener(opener)
urllib.request.urlretrieve('http://www.google.com')

当然ながら,ProxyHandlerのアドレスは,使うプロキシに合わせて変更する必要がある.

ユーザ認証が必要な方は別にやり方があるっぽいけど,今回はいらないやつだったのでコレ.


具体例

この本の場合,プロキシサーバがhttp://proxy.sample.com:8080なら,mnist.pyのsave_fileの定義の直後に以下のようなスクリプトを追加.正常にダウンロードできた.

proxy = urllib.request.ProxyHandler({'http': 'http://proxy.sample.com:8080'})

opener = urllib.request.build_opener(proxy)
urllib.request.install_opener(opener)






  1. python3系のAnacondaディストリビューションを使っている. 



  2. Windows環境. 



  3. 使うファイルはすべて,GitHubで公開されている. 



  4. pythonはこないだから使い始めたばかりなので,まだまだ初心者.注釈の入れ方もさっき覚えたので無駄に使ってみたくなる.