2009年5月7日木曜日

PEAR::HTTP_Client 非徹底解剖

PEAR::HTTP_Clinetがget()する時の、主にコネクションを確立するまでの大まかなfunctionの流れ。


HTTP_Client#get()

HTTP_Client#_performRequest()

HTTP_Request#sendRequest() ※1
↓ ↓ ※2
↓ Net_Socket#connect() ※3
↓ ↓ ↓
↓ ↓fsockopen()
↓ ↓ ※4
↓ socket_set_blocking() ※5

HTTP_Response#process() ※6

ソケット経由で得たレスポンスを処理していく
(以下省略)


※1 将来的にはHTTP_Request2に切り替える可能性が高いと思われる
※2 URLのスキームがhttpsの場合は、ホスト名は「ssl://ホスト名」に、そうでない場合はIPアドレスに変換される
※3 ちなみにHTTP_Request2の場合、自前のSocketクラス(HTTP_Request2_Adapter_Socket)を使っている
※4 もしこのあたりでNet_Socket#enableCrypto()を使えばSSLのバージョンを指定できるけど、使っていない
※5 stream_set_blocking()のエイリアス。この流れの中ではデフォルト設定のままなので、常にブロッキングを有効にしている
※6 HTTP_Responseクラスは、HTTP_Requestのファイル(Request.php)内で定義されている

0 件のコメント:

ブログ アーカイブ

tags