PHP实现curl post和get
CURL这里就不说明了。以下是简单案例
一、POST
//初始化 $curl = curl_init(); //设置抓取的url curl_setopt($curl, CURLOPT_URL, 'http://www.baidu.com'); //设置头文件的信息作为数据流输出 curl_setopt($curl, CURLOPT_HEADER, 1); //设置获取的信息以文件流的形式返回,而不是直接输出。 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //设置post方式提交 curl_setopt($curl, CURLOPT_POST, 1); //设置post数据 $post_data = array( "username" => "coder", "password" => "12345" ); curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data); //执行命令 $data = curl_exec($curl); //关闭URL请求 curl_close($curl); //显示获得的数据 print_r($data);
POST private function _set_headers($user_agent , $client_ip ) { $this->headers = [ 'Content-Type: application/json;charset=UTF-8', 'Authorization: '. self::APP_KEY.':'.$this->sign, 'Date: ' .$this->gmt_date, 'Content-Length: ' .$this->content_len, 'X-FORWARDED-FOR:'. $client_ip, 'CLIENT-IP:'. $client_ip, 'User-Agent:'.$user_agent ]; } private function http_post_json($url, $jsonStr) { $ch = curl_init(); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonStr); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, $this->headers); //curl_setopt($ch,CURLOPT_PROXY,'118.0.0.1:8888'); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); return ['code' => $httpCode, 'msg' => $response]; }
二、GET
//初始化 $curl = curl_init(); //设置抓取的url curl_setopt($curl, CURLOPT_URL, 'http://www.baidu.com'); //设置头文件的信息作为数据流输出 curl_setopt($curl, CURLOPT_HEADER, 1); //设置获取的信息以文件流的形式返回,而不是直接输出。 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //执行命令 $data = curl_exec($curl); //关闭URL请求 curl_close($curl); //显示获得的数据 print_r($data);
GET //get获取合力token private function http_get_token() { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, self::GET_ACCESS_TOKEN_URL); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $data = curl_exec($ch); var_dump($data);die; $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); return ['code' => $httpCode, 'msg' => CJSON::decode($data, true)]; }
/** * 发起HTTP GET请求 * * @param string $url 请求URL * @param string $host 请求主机HOST * @param array $params 请求参数 */ public function http_get($url, $host = '', $params = array(), $timeout=3, $ms = false){ if(is_array($params)){ $getString= ''; $getParams = array(); foreach ($params as $key=>$val) { $getParams[] = $key.'='.($val); $getString = implode('&', $getParams); } //$getString = http_build_query($params); }else{ $getString = $params; } $url .= "?" . $getString; if (function_exists('curl_init')) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); if(!empty($host)){ curl_setopt($ch, CURLOPT_HTTPHEADER, array('Host: ' . $host)); } curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERAGENT, 'PHP5 Client ver: ' . phpversion()); if(true === $ms){ curl_setopt($ch, CURLOPT_TIMEOUT_MS, $timeout); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, $timeout); }else{ curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); } $result = curl_exec($ch); curl_close($ch); } else { // 发起请求 $handle = fopen ( $url, 'r' ); $result = ""; if ($handle) { while ( ! feof ( $handle ) ) { $result .= fread ( $handle, 4096 ); } fclose ( $handle ); } } return $result; }
/** * post请求 * @param $url string * @param $host string */ private function http_post($url, $host = '', $params = array(), $timeout=5, $ms = false){ if(is_array($params)){ $postString = http_build_query($params); }else{ $postString = $params; } if (function_exists('curl_init')) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); if(!empty($host)){ curl_setopt($ch, CURLOPT_HTTPHEADER, array('Host: ' . $host)); } curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $postString); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERAGENT, 'YOUKU.COM PREMIUM API PHP5 Client ver: ' . phpversion()); if(true === $ms){ curl_setopt($ch, CURLOPT_TIMEOUT_MS, $timeout); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, $timeout); }else{ curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); } $result = curl_exec($ch); curl_close($ch); } else { $context = array( 'http' => array( 'method' => 'POST', 'header' => 'Content-type: application/x-www-form-urlencoded' . "\r\n". 'Host: '.$host . "\r\n". 'User-Agent: PHP5 Client ver: ' . phpversion() . "\r\n". 'Content-length: ' . strlen($postString), 'content' => $postString ) ); $contextId = stream_context_create($context); $handle = fopen($url, 'r', false, $contextId); $result = ''; if ($handle) { while (!feof($handle)) { $result .= fgets($handle, 4096); } fclose($handle); } } return $result; }
//拨号请求 function doCurlGetRequest($url, $data = [], $header = [], $timeout = 5){ if($url == "" || $timeout <= 0){ return false; } $url = $url.'?'.http_build_query($data); $curl = curl_init((string)$url); curl_setopt($curl, CURLOPT_HEADER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 信任任何证书 curl_setopt($curl, CURLOPT_RETURNTRANSFER,true); curl_setopt($curl, CURLOPT_TIMEOUT, (int)$timeout); curl_setopt($curl, CURLOPT_HTTPHEADER, $header); //添加自定义的http header return curl_exec($curl); }