サーバで画像に動的に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を返さないと止まることがあるっぽい。
ということでサーバ側をちょこちょこ修正。
無事、止まらずに実行できるようになりました。

HOMMA Teppei

