ページ

2011年2月9日

やっぱりpycurl

昨日はurlgrabberだと言っておきながら、最新版はpycurlに依存しているし、urllibにこだわるほど思い入れもないし、やっぱり、pycurlだぜ、と言うことで。

インストールはいつも通りpip install pycurlだけでできます。コードは、

import pycurl

def body_callback(buf):
    print buf,

curl = pycurl.Curl()
curl.setopt(curl.URL, "http://localhost:8088")
curl.setopt(curl.WRITEFUNCTION, body_callback)
curl.perform()

curl.setopt(curl.URL, "http://localhost:8088")
curl.perform()

curl.close()

簡単ですね。何も考えなくてもkeep aliveがデフォルトで有効になっているので、最初のリクエスト(curl.perform())と次のリクエストは同じコネクションが使い回せます。その他、オプションはCのlibcurlと同じです。
リモートから取得したデータは登録したコールバック関数で処理します。きっとメモリ管理とか、Cの名残でしょうね。コールバック関数のbufは受け取ったデータが細切れできます。大きなデータを受信すると複数回にわけてコールバック関数が呼ばれます。
pycurlには他にもいろいろ便利な機能がたくさんありますが、それはコマンドラインのcurlと同じですね。

でわでわ

0 件のコメント: