1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > PHP实现支持GET POST Multipart/form-data的HTTP请求类 multipartform-data

PHP实现支持GET POST Multipart/form-data的HTTP请求类 multipartform-data

时间:2020-06-12 23:19:24

相关推荐

PHP实现支持GET POST Multipart/form-data的HTTP请求类 multipartform-data

php教程|php手册

PHP,HTTP,请求,类,enctype

php教程-php手册

PHP实现支持GET,POST,Multipart/form-data的HTTP请求类,multipartform-data

手机网址机器人源码,ubuntu下vlc安装,怎样在外部打开tomcat,爬虫java进阶,php 当前内存大小,价格seolzw

本文实例讲述了PHP实现支持GET,POST,Multipart/form-data的HTTP请求类及其应用,分享给大家供大家参考。具体如下:

短信验证jsp源码,ubuntu无法打开鼠标,很小的暗红爬虫,php修改php文件代码,老板学seolzw

HttpRequest.class.php类文件如下:

易语言娱乐源码,c51 vscode,ubuntu使用dnw,手机tomcat长连接,eventlet 爬虫,php 去除空白,新乡专业seo优化电话,广告任务发布网站源码,dede秀模板下载lzw

_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[ imeout])? $confg[ imeout] : 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, "\r\n\r\n"); $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.1\r\n";$out .= "host: ".$this->_host."\r\n";$out .= "connection: close\r\n\r\n";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[ ame]] = file_get_contents($filedata[path]); } }}if(!$data){ return false;}$data = http_build_query($data);$out = "POST ".$this->_url." http/1.1\r\n";$out .= "host: ".$this->_host."\r\n";$out .= "content-type: application/x-www-form-urlencoded\r\n";$out .= "content-length: ".strlen($data)."\r\n";$out .= "connection: close\r\n\r\n";$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."\r\n";// form data$formdata = \;foreach($this->_formdata as $key=>$val){ $formdata .= "content-disposition: form-data; name=\"".$key."\"\r\n"; $formdata .= "content-type: text/plain\r\n\r\n"; if(is_array($val)){ $formdata .= json_encode($val)."\r\n"; // 数组使用json encode后方便处理 }else{ $formdata .= rawurlencode($val)."\r\n"; } $formdata .= --.$boundary."\r\n";}// file data$filedata = \;foreach($this->_filedata as $val){ if(file_exists($val[path])){ $filedata .= "content-disposition: form-data; name=\"".$val[ ame]."\"; filename=\"".$val[filename]."\"\r\n"; $filedata .= "content-type: ".mime_content_type($val[path])."\r\n\r\n"; $filedata .= implode(\, file($val[path]))."\r\n"; $filedata .= --.$boundary."\r\n"; }}if(!$formdata && !$filedata){ return false;}$data .= $formdata.$filedata."--\r\n\r\n";$out = "POST ".$this->_url." http/1.1\r\n";$out .= "host: ".$this->_host."\r\n";$out .= "content-type: multipart/form-data; boundary=".$boundary."\r\n";$out .= "content-length: ".strlen($data)."\r\n";$out .= "connection: close\r\n\r\n";$out .= $data;return $out; } } // class end ?>

demo示例程序如下:

\, // 如空则用host代替 host => \, port => 80, errno => \, errstr => \, imeout => 30, url => /getapi.php, //url => /postapi.php, //url => /multipart.php ); $formdata = array( ame => fdipzone, gender => man ); $filedata = array( array( ame => photo,filename => photo.jpg,path => photo.jpg ) ); $obj = new HttpRequest(); $obj->setConfig($config); $obj->setFormData($formdata); $obj->setFileData($filedata); $result = $obj->send(get); //$result = $obj->send(post); //$result = $obj->send(multipart); echo

; print_r($result); echo

;

?>

完整实例代码可以点击此处本站下载。

【急】对于PHP中文件上传 POST传值问题 不确定是enctype="multipart/form-data"属性问题还是版本问题

文件上传类型为file的控件,后台获取时只能用$_FILES来获取,其他的控件类型才是用$_POST来获取,你只需要用$_FILES获取的值来进行你的处理。

js 模拟POST提交enctype="multipart/form-data"类型的表单

只是需要文件上传才用它的

xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");

改成

xmlHttp.setRequestHeader("Content-Type","multipart/form-data;");

至于发送二进制数据,你自己解决吧。

-----------------------------7db8c30150364 这个其实有规律的

就是一个开始段一个结束段,7db8c30150364 只是用一串不重复的字符,标识一起其中间的东西就是数据,Content-Disposition: form-data; name="polls[]" 这个是用来表示什么数据,文件名是啥。

其实在socket发包中,上传文件的时候就要这么用,有空研究一下HTTP里面POST 文件时,应该如何处理。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。