Pythonで、サーバからの画像取得で止まる

サーバで画像に動的にExif情報を付加して、それをローカルのPythonで大量取得しようとしてハマったのでメモ。

ローカル側は超省略するけど、以下のような感じ。

# URLをXMLから取得
image_path = i.find("Url").text
# 認証のかかっている場所から画像取得
img = urllib2.urlopen(urllib2.Request(unicode(image_path), None, {"Authorization": "Basic " + basicAuth}))
localfile = file('./' + id + ".jpg", "wb")
# 読み書き
localfile.write(img.read())
img.close()
localfile.close()

上記を10000ファイルくらい繰り返しで取得する。

が。

img.read()のところでなぜか止まる。

大体10個くらい読み込んだ時点で止まる。

Traceback (most recent call last):
  File "***.py", line 62, in <module>
    localfile.write(img.read())
  File "C:Python25libsocket.py", line 291, in read
    data = self._sock.recv(recv_size)
  File "C:Python25libhttplib.py", line 509, in read
    return self._read_chunked(amt)
  File "C:Python25libhttplib.py", line 573, in _read_chunked
    line = self.fp.readline()
  File "C:Python25libsocket.py", line 331, in readline
    data = recv(1)
KeyboardInterrupt

色々調べた結果、サーバ側でContent-Lengthを返さないと止まることがあるっぽい。

ということでサーバ側をちょこちょこ修正。

無事、止まらずに実行できるようになりました。


新しく会社作りました!

コメントをどうぞ