Server : Apache System : Linux iZ2vcgyutqttsd1p850kl8Z 3.10.0-1160.92.1.el7.x86_64 #1 SMP Tue Jun 20 11:48:01 UTC 2023 x86_64 User : www ( 1000) PHP Version : 5.6.40 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv Directory : /www/wwwroot/saimikebio.com/mobile/include/website/ |
<?php // HTTP 操作 /*============================================================================ **/ if (!defined('WEBSITE')) { if(!function_exists('curl_init')) // 检测是否支持 curl_init { define('CURL' , false); if(function_exists('fsockopen')) // 检测是否支持 fsockopen { define('FSOCK' , true); } else { define('FSOCK' , false); } } else { define('CURL' , true); } class cls_http { public $error_msg = array(); public $http_code; public $url; public $timeout = 60; public $connecttimeout = 30; public $ssl_verifypeer = FALSE; public $http_info; public static $boundary = ''; function http($url, $method = 'GET', $parameters = array(), $multi = false) { switch ($method) { case 'GET': if(!empty($parameters)) { $url = $url . '?' . http_build_query($parameters); } return $this->httpRequest($url, 'GET'); break; case 'POST': if(is_array($parameters)) { $body = $this->get_params($parameters); } else { $body = $parameters; } return $this->httpRequest($url, $method, $body); break; default: $headers = array(); if (!$multi && (is_array($parameters) || is_object($parameters)) ) { $body = http_build_query($parameters); } else { $body = self::build_http_query_multi($parameters); $headers[] = "Content-Type: multipart/form-data; boundary=" . self::$boundary; } return $this->httpRequest($url, $method, $body, $headers); break; } } function httpRequest($url, $method, $postfields = NULL, $headers = array()) { if(!CURL) { if(FSOCK) { $responseText = $this->fsockRequest($url , $method , $postfields , $headers); return $responseText; } return false; } $this->http_info = array(); $ci = curl_init(); /* Curl settings */ curl_setopt($ci, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); //curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent); curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout); curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout); curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ci, CURLOPT_ENCODING, ""); curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer); curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader')); curl_setopt($ci, CURLOPT_HEADER, FALSE); switch ($method) { case 'POST': if (!empty($postfields)) { curl_setopt($ci, CURLOPT_POST, TRUE); curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields); $this->postdata = $postfields; } break; } $headers[] = "API-RemoteIP: " . $_SERVER['REMOTE_ADDR']; curl_setopt($ci, CURLOPT_URL, $url ); curl_setopt($ci, CURLOPT_HTTPHEADER, $headers ); curl_setopt($ci, CURLINFO_HEADER_OUT, TRUE ); $response = curl_exec($ci); $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE); $this->http_info = array_merge($this->http_info, curl_getinfo($ci)); $this->url = $url; curl_close ($ci); return $response; } /** * Get the header info to store. * * @return int * @ignore */ function getHeader($ch, $header) { $i = strpos($header, ':'); if (!empty($i)) { $key = str_replace('-', '_', strtolower(substr($header, 0, $i))); $value = trim(substr($header, $i + 2)); $this->http_header[$key] = $value; } return strlen($header); } /** * @ignore */ public static function build_http_query_multi($params) { if (!$params) return ''; uksort($params, 'strcmp'); $pairs = array(); self::$boundary = $boundary = uniqid('------------------'); $MPboundary = '--'.$boundary; $endMPboundary = $MPboundary. '--'; $multipartbody = ''; foreach ($params as $parameter => $value) { if( in_array($parameter, array('pic', 'image')) && $value{0} == '@' ) { $url = ltrim( $value, '@' ); $content = file_get_contents( $url ); $array = explode( '?', basename( $url ) ); $filename = $array[0]; $multipartbody .= $MPboundary . "\r\n"; $multipartbody .= 'Content-Disposition: form-data; name="' . $parameter . '"; filename="' . $filename . '"'. "\r\n"; $multipartbody .= "Content-Type: image/unknown\r\n\r\n"; $multipartbody .= $content. "\r\n"; } else { $multipartbody .= $MPboundary . "\r\n"; $multipartbody .= 'content-disposition: form-data; name="' . $parameter . "\"\r\n\r\n"; $multipartbody .= $value."\r\n"; } } $multipartbody .= $endMPboundary; return $multipartbody; } function get_params($p) { $str = ''; foreach($p as $key => $val) { if(isset($str{1})) { $str .= '&'; } $str .= $key .'='.$val; } return $str; } // NUM code // String message // String 附加错误 function add_error($code , $message , $string ='') { $this->error_msg['code'] = $code; $this->error_msg['message'] = $message; $this->error_msg['string'] = $string; } function echo_error( $str = '' ) { echo $str ."\r\n"; print_r( $this->error_msg ); exit(); } function get_error() { $string = ''; $string .= '-code:'.$this->error_msg['code']."<br />\r\n<br />\r\n"; $string .= '-message:'.$this->error_msg['message']."<br />\r\n<br />\r\n"; $string .= '-Message2:'.$this->error_msg['string']."<br />\r\n<br />\r\n"; return $string; } /* 模拟HTTP 提交数据 * @param public * @param string $url 连接地址 * @param string $method 模式 只有 GET POST * @param string $postfields 提交的数据 * @param array @headers 头数据 */ function fsockRequest( $url, $method, $postfields = NULL, $headers = array() ) { $urlarr = parse_url($url); $errno = ''; $errstr = ''; $transports = ''; $responseText = ''; if($urlarr['scheme'] == 'https') { $transports = 'ssl://'; $urlarr['port'] = '443'; } else { $transports = 'tcp://'; $urlarr['port'] = '80'; } $fp = @fsockopen($transports . $urlarr['host'] , $urlarr['port'] , $errno , $errstr , $this->timeout); if(!$fp) { die("ERROR: $errno - ".ecs_iconv('GBK' , 'UTF8', $errstr)."<br />\r\n"); return false; } else { if(!empty($urlarr['query'])) { $urlarr['path'] .= '?'.$urlarr['query']; } $urlarr['method'] = $method; //print_r($urlarr); $header = $method.' '. $urlarr['path'] ." HTTP/1.1\r\n"; //fputs($fp, $method.' '. $urlarr['path'] ." HTTP/1.1\r\n"); //fputs($fp, "Referer: " . $url ."\r\n"); if($method == 'POST') { $header .= "Content-type: application/x-www-form-urlencoded\r\n"; $header .= "Content-length: ".strlen($postfields)."\r\n"; } $header .= "Host: ".$urlarr['host']."\r\n"; $header .= "Connection: close\r\n\r\n"; fputs($fp , $header); if($method == 'POST') // 发送数据 { fputs($fp, $postfields . "\r\n\r\n"); } while(!feof($fp)) { $responseText .= @fgets($fp, 1024); } fclose($fp); $len = 0; $pos = strpos($responseText , 'Content-Length:'); if($pos > 0) { $pos += 15; $len = intval(substr($responseText , $pos , stripos($responseText , "\r\n" , $pos) - $pos)); } $responseText = trim(stristr($responseText,"\r\n\r\n"),"\r\n"); if($len > 0) { if(strlen($responseText) != $len) { $nowH = substr($responseText , 0 , strpos($responseText , "\r\n")); if(strlen($responseText) - strlen($nowH) + 2 == $len) { $responseText = substr($responseText , strpos($responseText , "\r\n") + 2); } } } else { $responseText = trim(substr($responseText , strpos($responseText , "\r\n") + 2) , "\r\n"); $responseText = substr($responseText , 0 , strrpos($responseText ,"\r\n")); } return $responseText; } } } } ?>