Welcome 微信登录

首页 / 网页编程 / PHP / php HTTP请求类,支持GET,POST,Multipart/form-data

php HTTP请求类,支持GET,POST,Multipart/form-data2014-08-20HttpRequest.class.php

<?php/** HttpRequest class, HTTP请求类,支持GET,POST,Multipart/form-data * Date: 2013-09-25 * Author: fdipzone * Ver:1.0 * * Func: * publicsetConfig 设置连接参数 * publicsetFormdata 设置表单数据 * publicsetFiledata 设置文件数据 * publicsend发送数据 * private connect 创建连接 * private disconnect断开连接 * private sendGet get 方式,处理发送的数据,不会处理文件数据 * private sendPostpost 方式,处理发送的数据 * private sendMultipart multipart 方式,处理发送的数据,发送文件推荐使用此方式 */class HttpRequest{ // class startprivate $_ip = "";private $_host = "";private $_url = "";private $_port = "";private $_errno = "";private $_errstr = "";private $_timeout = 15;private $_fp = null;private $_formdata = array();private $_filedata = array();// 设置连接参数public function setConfig($config){$this->_ip = isset($config["ip"])? $config["ip"] : "";$this->_host = isset($config["host"])? $config["host"] : "";$this->_url = isset($config["url"])? $config["url"] : "";$this->_port = isset($config["port"])? $config["port"] : "";$this->_errno = isset($config["errno"])? $config["errno"] : "";$this->_errstr = isset($config["errstr"])? $config["errstr"] : "";$this->_timeout = isset($confg["timeout"])? $confg["timeout"] : 15;// 如没有设置ip,则用host代替if($this->_ip==""){$this->_ip = $this->_host;}}// 设置表单数据public function setFormData($formdata=array()){$this->_formdata = $formdata;}// 设置文件数据public function setFileData($filedata=array()){$this->_filedata = $filedata;}// 发送数据public function send($type="get"){$type = strtolower($type);// 检查发送类型if(!in_array($type, array("get","post","multipart"))){return false;}// 检查连接if($this->connect()){switch($type){case "get":$out = $this->sendGet();break;case "post":$out = $this->sendPost();break;case "multipart":$out = $this->sendMultipart();break;}// 空数据if(!$out){return false;}// 发送数据fputs($this->_fp, $out);// 读取返回数据$response = "";while($row = fread($this->_fp, 4096)){$response .= $row;}// 断开连接$this->disconnect();$pos = strpos($response, "rnrn");$response = substr($response, $pos+4);return $response;}else{return false;}}// 创建连接// private function connect(){$this->_fp = fsockopen($this->_ip, $this->_port, $this->_errno, $this->_errstr, $this->_timeout);if(!$this->_fp){return false;}return true;}// 断开连接private function disconnect(){if($this->_fp!=null){fclose($this->_fp);$this->_fp = null;}}// get 方式,处理发送的数据,不会处理文件数据private function sendGet(){// 检查是否空数据if(!$this->_formdata){return false;}// 处理url$url = $this->_url."?".http_build_query($this->_formdata);$out = "GET ".$url." http/1.1rn";$out .= "host: ".$this->_host."rn";$out .= "connection: closernrn";return $out;}// post 方式,处理发送的数据private function sendPost(){// 检查是否空数据if(!$this->_formdata && !$this->_filedata){return false;}// form data$data = $this->_formdata? $this->_formdata : array();// file dataif($this->_filedata){foreach($this->_filedata as $filedata){if(file_exists($filedata["path"])){$data[$filedata["name"]] = file_get_contents($filedata["path"]);}}}if(!$data){return false;}$data = http_build_query($data);$out = "POST ".$this->_url." http/1.1rn";$out .= "host: ".$this->_host."rn";$out .= "content-type: application/x-www-form-urlencodedrn";$out .= "content-length: ".strlen($data)."rn";$out .= "connection: closernrn";$out .= $data;return $out;}// multipart 方式,处理发送的数据,发送文件推荐使用此方式private function sendMultipart(){// 检查是否空数据if(!$this->_formdata && !$this->_filedata){return false;}// 设置分割标识srand((double)microtime()*1000000);$boundary = "---------------------------".substr(md5(rand(0,32000)),0,10);$data = "--".$boundary."rn";// form data$formdata = "";foreach($this->_formdata as $key=>$val){$formdata .= "content-disposition: form-data; name="".$key.""rn";$formdata .= "content-type: text/plainrnrn";if(is_array($val)){$formdata .= json_encode($val)."rn"; // 数组使用json encode后方便处理}else{$formdata .= rawurlencode($val)."rn";}$formdata .= "--".$boundary."rn";}// file data$filedata = "";foreach($this->_filedata as $val){if(file_exists($val["path"])){$filedata .= "content-disposition: form-data; name="".$val["name"].""; filename="".$val["filename"].""rn";$filedata .= "content-type: ".mime_content_type($val["path"])."rnrn";$filedata .= implode("", file($val["path"]))."rn";$filedata .= "--".$boundary."rn";}}if(!$formdata && !$filedata){return false;}$data .= $formdata.$filedata."--rnrn";$out = "POST ".$this->_url." http/1.1rn";$out .= "host: ".$this->_host."rn";$out .= "content-type: multipart/form-data; boundary=".$boundary."rn";$out .= "content-length: ".strlen($data)."rn";$out .= "connection: closernrn";$out .= $data;return $out;}} // class end?>