PHP5HTTPClient的なものを作ってみた(GETのみ)

February 4, 2009,
tags: fsockopen get http php


このエントリーをはてなブックマークに追加

テスト前ですが、ぜんぜんテスト勉強とか、あとは就職活動のためのSPI対策とかやっていません。。正直嫌です。だからPHPでHTTPClient書いてみました。
本来ならPEARのHTTP_Clientを使えばいいんだろうけど、ちょっと諸事情によりWordPressにも使えるようにしたいってことで、HTTPClient的なものを簡単に書いてみました。
といってもGETしかできません・・・。残りはまた今度書こうと思います。

初めて書いてみたいんだけど、以外と簡単に書けました。
ちなみに、今回はtry ~ catch文をPHPで使ってみました。なんかスマートな使い方がわからなかったので、ひどいかも・・・。突っ込むところあったらどんどん突っ込んでください。

httpclient.php

<?php

$http = new HTTPClient();
print $http->getHttp("/");

class HTTPClient
{

    public $host = "www.polidog.jp";
    public $port = 80;


    public function getHttp($path='',$body=''){
        $ret = null;
        try{
            //値チェック
            if(empty($path)){throw new Exception("pathが存在しません");}
            if(empty($this->host)){throw new Exception("ホスト名が存在しません");}
            if(!is_numeric($this->port)){throw new Exception("ポート番号が不正です");}

            $fp = fsockopen( $this->host, $this->port, $errno, $errstr, 30);
            if(!$fp){throw new Exception("HTTP接続ができません");}
            $http_header .= "GET $path HTTP/1.0\r\n";
            $http_header .= "Host: ".$this->host."\r\n";
            $http_header .= "Accept: */*\r\n";
            $http_header .= "Connection: Close\r\n\r\n";

            fwrite($fp,$http_header);
            while ( !feof( $fp ) ) {
                $ret .=  fgets( $fp, 128 );
            }
            fclose( $fp );

        }catch(Exception $e){
            print $e->getMessage();
            exit();
        }

        return $ret;
    }
}

?>

いつもだったら値のチェックするところはreturn falseで返してたけど、try ~ catch文のほうが値がない場合の処理がしやすいと思ってみたり。
まあ、今回は$e->getMessage();でエラーメッセージしか表示させてないけど、catch文での処理用のメソッド書いて置くのも手なのかな?あんまりよいやり方思いつかないけど・・・。

明日あたりにpostまで出来るようにしたいなぁ。

comments powered by Disqus