urllib2が動かない・・・
pythonからhttpリクエストするために、http://www.void.in/wiki/Python/HTTPを参考にしてurllib2を使ってみた。
F:\File\IronPython\IronPython-1.1>ipy IronPython 1.1 (1.1) on .NET 2.0.50727.42 Copyright (c) Microsoft Corporation. All rights reserved. >>> import urllib2 >>> req = urllib2.Request( 'http://192.168.101.130/' ) >>> opener = urllib2.build_opener() >>> f = opener.open( req ) Traceback (most recent call last): File , line 0, in <stdin>##149 File D:\Program Files\Python24\Lib\urllib2.py, line 358, in open File D:\Program Files\Python24\Lib\urllib2.py, line 375, in _open File urllib2, line unknown, in _call_chain File D:\Program Files\Python24\Lib\urllib2.py, line 337, in _call_chain File D:\Program Files\Python24\Lib\urllib2.py, line 1021, in http_open File D:\Program Files\Python24\Lib\urllib2.py, line 1010, in do_open AttributeError: 'module' object has no attribute '_fileobject' >>>
IronPythonを1.1にしたのがまずったのかなぁ・・・全然原因がわからない。そもそもIronPythonで動くのかすらわからないんだけれども。
追記
python2.4環境だと動作した。IronPythonからはurllib2が利用できないのかも知れない。何か方法ないのだろうか。
追記2
IronPython 1.0.1ではimport urllib2すらできない。
F:\File\IronPython\IronPython-1.0.1>ipy IronPython 1.0 (1.0.61005.1977) on .NET 2.0.50727.42 Copyright (c) Microsoft Corporation. All rights reserved. >>> import urllib2 Traceback (most recent call last): File , line 0, in <stdin>##11 File , line 0, in __import__##4 File D:\Program Files\Python24\Lib\urllib2.py, line 95, in Initialize File , line 0, in __import__##4 ImportError: No module named md5
これはmd5モジュールがないのが原因かな。
追記3
IronPython 1.1でurllibを利用した場合
F:\File\IronPython\IronPython-1.1>ipy IronPython 1.1 (1.1) on .NET 2.0.50727.42 Copyright (c) Microsoft Corporation. All rights reserved. >>> import urllib >>> opener = urllib.FancyURLopener() >>> f = opener.open( 'http://192.168.101.130/xxx/index.html' ) >>> print f.info() Date: Thu, 19 Apr 2007 07:13:50 GMT Server: Apache/1.3.33 (Win32) Last-Modified: Fri, 02 Mar 2007 03:46:56 GMT ETag: "0-4585-45e79e30" Accept-Ranges: bytes Content-Length: 17797 Connection: close Content-Type: text/html >>> print f.read() Traceback (most recent call last): File System, line unknown, in Read File System, line unknown, in Receive File System, line unknown, in Receive File , line 0, in <stdin>##161 File , line 0, in Read##162 File System, line unknown, in Read IOError: 転送接続からデータを読み取れません: 破棄されたオブジェクトにアクセスで きません。 オブジェクト名 'System.Net.Sockets.Socket' です。。
f.read()が動作しないのが痛い。たぶんpythonのread()が.NetのSocketだとうまく動作しないからだろう。
結局System.Net.WebRequestとかで同じことはできたんだけど・・・なんだかなぁ。
追記4
FePyを使って出来た(http://d.hatena.ne.jp/xanthus/20070420)。純正IronPythonじゃ無理っぽい。