php寫的http請求封裝類

來源:互聯網
上載者:User
本文介紹一個php實現的http請求封裝類,封裝了三種post提交方法和一個request要求方法,並提供了調用樣本,供大家學習參考。

在php編程調試時,經常需要類比提交。另外,在抓取一些頁面時,需要經常請求別人的頁面。

於是實現了一個http請求的封裝類,以方便調用。本http請求類,封裝了三種post提交方法和一個request要求方法。

1,http請求封閉類

 0)            {                $this->init($params);            }        }        // -----------------------        /**         * 參數初始化         *         * @param array $params         */        public function init($params)        {            if(count($params) > 0)            {                foreach($params as $key => $val)                {                    if(isset($this->$key))                    {                        $this->$key = $val;                    }                }            }        }        // -----------------------        /**         * 提交請求         *         * @param string $url 請求地址         * @param mixed $data 提交的資料         * @param string $type 提交類型,curl,socket,stream可選         */        public function post($url, $data, $type = "socket")        {            if(!in_array($type, $this->post_type_list))            {                die("undefined post type");            }            $function_name = $type . "Post";            return call_user_func_array(array($this, $function_name), array($url, $data));        }        // -----------------------        /**         * 更改預設的ua資訊         *         * 本方法常用於類比各種瀏覽器         *         * @param string $ua_string UA字串         */        public function setUA($user_agent)        {            $this->ua_string = $user_agent;            return $this;        }        // -----------------------        /**         * 設定本地cookie檔案         *         * 在用curl來類比時常需要設定此項         *         * @param string $cookie_file 檔案路徑         */        public function setCookieFile($cookie_file)        {            $this->cookie_file = $cookie_file;            return $this;        }        // -----------------------        /**         * curl方式提交         *         * @param string $url 請求地址         * @param mixed $data 提交的資料         * @param string $user_agent 自訂的UA         * @return mixed         */        public function curlPost($url, $data, $user_agent = '')        {            if($user_agent == '')            {                $user_agent = $this->ua_string;            }            if (!is_array($data))            {                $data = array($data);            }            $data = http_build_query($data);            if (!function_exists("curl_init"))            {                die('undefined function curl_init');            }            $ch = curl_init();            curl_setopt($ch, CURLOPT_URL, $url);            curl_setopt($ch, CURLOPT_POST, true);            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);            curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);            $rs = curl_exec($ch);            curl_close($ch);            return $rs;        }        // -----------------------        /**         * 通訊端提交         *         * @param string $url 請求地址         * @param mixed $data 提交的資料         * @param string $user_agent 自訂的UA         * @param int $port 連接埠         * @param int $timeout 逾時限制         * @return mixed         */        public function socketPost($url, $data, $user_agent = '', $port = 80, $timeout = 30)        {            $url_info = parse_url($url);            $remote_server = $url_info['host'];            $remote_path = $url_info['path'];            $socket = fsockopen($remote_server, $port, $errno, $errstr, $timeout);            if(!$socket)            {                die("$errstr($errno)");            }            if($user_agent == '')            {                $user_agent = $this->ua_string;            }            if (!is_array($data))            {                $data = array($data);            }            $data = http_build_query($data);            fwrite($socket, "POST {$remote_path} HTTP/1.0\r\n");            fwrite($socket, "User-Agent: {$user_agent}\r\n");            fwrite($socket, "HOST: {$remote_server}\r\n");            fwrite($socket, "Content-type: application/x-www-form-urlencoded\r\n");            fwrite($socket, "Content-length: " . strlen($data) . "\r\n");            fwrite($socket, "Accept:*/*\r\n");            fwrite($socket, "\r\n");            fwrite($socket, "{$data}\r\n");            fwrite($socket, "\r\n");            $header = "";            while($str = trim(fgets($socket, 4096)))            {                $header .= $str;            }            $data = "";            while(!feof($socket))            {                $data .= fgets($socket, 4096);            }            return $data;        }        // -----------------------        /**         * 檔案流提交         *         * @param string $url 提交地址         * @param string $data 資料         * @param string $user_agent 自訂的UA         * @return mixed         */        public function streamPost($url, $data, $user_agent = '')        {            if($user_agent == '')            {                $user_agent = $this->ua_string;            }            if (!is_array($data))            {                $data = array($data);            }            $data = http_build_query($data);            $context = array(                    'http' => array(                            'method' => 'POST',                            'header' => 'Content-type: application/x-www-form-urlencoded' . "\r\n" . 'User-Agent : ' . $user_agent . "\r\n" . 'Content-length: ' . strlen($data),                            'content' => $data                    )            );            $stream_context = stream_context_create($context);            $data = file_get_contents($url, FALSE, $stream_context);            return $data;        }        // -----------------------        /**         * 發送請求         *         * 本方法通過curl函數向目標伺服器發送請求         *         * @param string $url 請求地址         * @return mixed         */        public function request($url)        {            $ch = curl_init();            curl_setopt($ch, CURLOPT_URL, $url);            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);            curl_setopt($ch, CURLOPT_USERAGENT, !empty($this->ua_string)? $this->ua_string : $_SERVER['HTTP_USER_AGENT']);            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);            if (isset($this->cookie_file))            {                curl_setopt($ch, CURLOPT_COOKIEJAR, $this->cookie_file);            }            $data = curl_exec($ch);            curl_close($ch);            return $data;        }    }?>

調用樣本:

"socket");    $rs[] = $HttpHelper->post($url, $data);    $data = array("name"=>"curl");    $rs[] = $HttpHelper->post($url, $data, "curl");    $data = array("name"=>"stream");    $rs[] = $HttpHelper->post($url, $data, "stream");    $rs[] = $HttpHelper->request($url);    print_r($rs);?>

3,post.php檔案:

4,輸出結果:

Array ( [0] => test request:Array ( [name] => socket )

[1] => test request:Array ( [name] => curl )

[2] => test request:Array ( [name] => stream )

[3] => test request:Array ( )

)

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.