GAE python のurllib.uropen()で大層なエラーが出たと思ったら、指定のURLが開けなかっただけだった。

GAE python のurllib.uropen()で大層なエラーが出たと思ったら、指定のURLが開けなかっただけだった。


 Google App Engine(Python)で、urllib.urlopen()で以下のようなエラーが出て、私は大層悩んでいた。

 

The API package 'remote_socket' or call 'Resolve()' was not found.
Traceback (most recent call last):
File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/_webapp25.py", line 703, in __call__
handler.post(*groups)
File "/base/data/home/apps/poseritem/25.359525066098703833/main.py", line 779, in post
freestuff.detail_img = get_sitedata(titleblock.find('img')['src'])
File "/base/data/home/apps/poseritem/25.359525066098703833/main.py", line 181, in get_sitedata
f = urllib.urlopen(url)
File "/base/python_runtime/python_dist/lib/python2.5/urllib.py", line 82, in urlopen
return opener.open(url)
File "/base/python_runtime/python_dist/lib/python2.5/urllib.py", line 190, in open
return getattr(self, name)(url)
File "/base/python_runtime/python_dist/lib/python2.5/urllib.py", line 457, in open_file
return self.open_ftp(url)
File "/base/python_runtime/python_dist/lib/python2.5/urllib.py", line 514, in open_ftp
host = socket.gethostbyname(host)
File "/base/python_runtime/python_lib/versions/1/google/appengine/api/remote_socket/_remote_socket.py", line 299, in gethostbyname
return _Resolve(host, [AF_INET])[2][0]
File "/base/python_runtime/python_lib/versions/1/google/appengine/api/remote_socket/_remote_socket.py", line 251, in _Resolve
canon, aliases, addresses = _ResolveName(name, families)
File "/base/python_runtime/python_lib/versions/1/google/appengine/api/remote_socket/_remote_socket.py", line 269, in _ResolveName
apiproxy_stub_map.MakeSyncCall('remote_socket', 'Resolve', request, reply)
File "/base/python_runtime/python_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 94, in MakeSyncCall
return stubmap.MakeSyncCall(service, call, request, response)
File "/base/python_runtime/python_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 320, in MakeSyncCall
rpc.CheckSuccess()
File "/base/python_runtime/python_lib/versions/1/google/appengine/api/apiproxy_rpc.py", line 133, in CheckSuccess
raise self.exception
CallNotFoundError: The API package 'remote_socket' or call 'Resolve()' was not found.


  うーん、remote socketがどうとか言っているぞ、私が知らない間にGoogle App Engineの仕様が変わったんだろうか。うーむ。
 とか悩んでいたのだが、指定した変数が誤っていただけだった。具体的にはこんな感じ。

 urllib.urlopen(url) と書いてて、

 url の中には、URLとしては正しくない文字列が入ってた。

 私が悪いんだけど、色々棚に上げて文句を言っておこう。
 「だったら、URLが開けないとか、間違ってませんかとか、そういう親切なエラーメッセージを出してくれ!」
 少しだけすっきりしたところで、今回の覚書を終わる。