PHP在http/https下的GET,POST请求方法总结

  • Post author:
  • Post category:php


#####################HTTP#POST请求方法#####################
public static function post($url, $post_data = '', $timeout = 5){//curl
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_POST, 1);
if($post_data != ''){
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
}

curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_HEADER, false);
$file_contents = curl_exec($ch);
curl_close($ch);
return $file_contents;
}


public static function post2($url, $data){//file_get_content
$postdata = http_build_query(
$data
);
$opts = array('http' =>
array(
'method'  => 'POST',
'header'  => 'Content-type: application/x-www-form-urlencoded',
'content' => $postdata
)
);

$context = stream_context_create($opts);
$result = file_get_contents($url, false, $context);
return $result;
}


public static function post3($host,$path,$query,$others=''){//fsocket

$post="POST $path HTTP/1.1\\r\\nHost: $host\\r\\n";
$post.="Content-type: application/x-www-form-";
$post.="urlencoded\\r\\n${others}";
$post.="User-Agent: Mozilla 4.0\\r\\nContent-length: ";
$post.=strlen($query)."\\r\\nConnection: close\\r\\n\\r\\n$query";
$h=fsockopen($host,80);
fwrite($h,$post);
for($a=0,$r='';!$a;){
$b=fread($h,8192);
$r.=$b;
$a=(($b=='')?1:0);
}

fclose($h);
return $r;
}


function CurlPost($url, $post, $is_json = false)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
    curl_setopt($ch, CURLOPT_URL, $url);

    // 是否 json
    if($is_json)
    {
        $data_string = json_encode($post);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
                "Content-Type: application/json; charset=utf-8",
                "Content-Length: " . strlen($data_string)
            )
        );
    } else {
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
                "Content-Type: application/x-www-form-urlencoded",
                "cache-control: no-cache"
            )
        );
    }

    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
}




#####################HTTPS#POST请求方法#####################
/*
     * 对https页面发送POST请求
     */
    function curl_for_post($url, $post_data = '', $timeout = 5){
        $ch = curl_init();
        curl_setopt ($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt ($ch, CURLOPT_POST, 1);
        if($post_data != ''){
            curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
        }
        curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
        curl_setopt($ch, CURLOPT_HEADER, false);
        $file_contents = curl_exec($ch);
        curl_close($ch);
        return $file_contents;
    }
/*
     * php 通过post方式发送json数据
     */
    private function http_post_data($url, $data_string) { 
        $ch = curl_init(); 
        curl_setopt($ch, CURLOPT_POST, 1); 
        curl_setopt($ch, CURLOPT_URL, $url); 
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); 
        curl_setopt($ch, CURLOPT_HTTPHEADER, array( 
            'Content-Type: application/json; charset=UTF-8', 
            'Content-Length: ' . strlen($data_string),
            'Tunnel-Command:4261421091')); 
        ob_start(); 
        curl_exec($ch); 
        $return_content = ob_get_contents(); 
        ob_end_clean(); 
   
        $return_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
        return array($return_code, $return_content); 
    }  
################################GET方法请求######################
一、culr函数
/*
 * curl get 方式获取远程内容
 * @param $url string 远程URL
 * @param $timeout int 
 * @return string
 */
function curl_get($url,$timeout){
    $ch = curl_init();
    curl_setopt ($ch, CURLOPT_URL, $url);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch, CURLOPT_TIMEOUT, $timeout);
    $file_contents = curl_exec($ch);
    curl_close($ch);
    return $file_contents;
}
二、通过file_get_contents()
return file_get_contents($url); 

/*
    * 对https的URL发送请求
    */
   private function curl_for_https($url){
       $ch = curl_init();
       curl_setopt($ch, CURLOPT_URL,$url);
       curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
       curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
       //并且页面直接输出后 就不向下执行了
       curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
       $result = curl_exec($ch);
       curl_close($ch);
       return $result;
   }