From: gotoken@... (GOTO Kentaro) Date: 1997-03-29T02:55:27+09:00 Subject: [ruby-list:2482] WWW library (Re: class design) あすなろ後藤です. '97年03月28日(金) 午後01時頃、原さん: > > まつもと ゆきひろです omit> > > 原さんと後藤さんを中心にして『URLライブラリの仕様について熱 > > く語る会』(略称:あすなろライブラリの会(一部に意味明瞭))を発 > > 足させましょう.なあに,実装のことは心配しなくても,仕様を決 > > めるだけで誰かが作ってくれますよ(私か?). > いいですね。perl5 のライブラリ libwww-perl を見るとあまりに > 立派過ぎてこれを作るのは容易ではないなと暗くなってしまうの あー確かに libwww-perl はすごいですね. 僕は python のライブラリをちょっと使っただけですが, 仕様は悪くないと思います. 基本は HTTP, FTP, GOPHER, NNTP などのスキームが socket を 使ったオブジェクトとして実装されています. URL.open(url) は url を解析してスキームを決定するわけです. が, 例えば FTP は普通 login 手順を踏む必要があるなどスキーム によってやることがエラク違うので必ずしも完全に実装されて いるわけではないです. ですから, やはり楽そうな HTTP あたりからオブジェクト化して いくのがいいのではないかと踏んでいます. httpサーバーを書く 場合には(METAやSSIのために) HTML も実装されている必要があると 思いますが, それなら SGML もある程度扱えるようにしておく 必要があるので(というか個人的には HTML3.2 の次は XML が はやると思うので)しんどそうです. いずれは欲しいんですけど. # SGML を扱うための一連の道具は欲しいなぁ. (ぼそっ) 僕が想像している基本方針としては URL をネットワークな オブジェクトにしたいなら, まず基本的なスキームを扱う仕様を 決めてそれで Mixin するのがいいのではないかと思います. でもポリモルフィズムもある程度考慮した方がいいような気も しますけどどうでしょうか? どちらにせよまず HTTP の socket ラッパーの部分を決めたいです. ちょっと長いですが python だと HTTPオブジェクトには 次のメソッドが用意されてます: * set_debuglevel(level) * connect(host[, port]) * send(data) * putrequest(reqest, selector) * putheader(header, argument[, ...]) * endheader() * getreply() * getfile() #例: # >>> from httplib import HTTP # >>> h = HTTP('www.python.org') # >>> h.putrequest('GET', '/index.html') # >>> h.putheader('Accept', 'text/html') # >>> h.putheader('Accept', 'text/plain') # >>> h.endheaders() # >>> errcode, errmsg, headers = h.getreply() # >>> if errcode == 200: # ... f = h.getfile() # ... print f.read() # Print the raw HTML # ... #
#