概要
オライリーから出てる「ゼロから作るDeep Learning」1.途中,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)