CURL GET和POST请求

<?php
/**
 * Created by PhpStorm.
 * User: root
 * Date: 15-9-17
 * Time: 下午7:59
 */
$method = $_SERVER['REQUEST_METHOD'];

//远程URL链接处理(将URL中的 中文 转码)
function cn_urlencode($url){
    $pregstr = "/[\x{4e00}-\x{9fa5}\x{FE30}-\x{FFA0}]+/u";//UTF-8中文正则
    if(preg_match_all($pregstr,$url,$matchArray)){//匹配中文,返回数组
        foreach($matchArray[0] as $key=>$val){
            $url=str_replace($val, urlencode($val), $url);//将转译替换中文
        }
        if(strpos($url,' ')){//若存在空格
            $url=str_replace(' ','%20',$url);
        }
    }
    return $url;
}

//执行 CURL 请求
function curl($url,$rHeader = array(),$post = false){
    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_VERBOSE, 1);
    curl_setopt($curl, CURLOPT_HEADER, 1);
    curl_setopt($curl,CURLOPT_HTTPHEADER,$rHeader);

    if($post){
        //$fields_string = http_build_query($fields);
        curl_setopt($curl, CURLOPT_POST, true);
        curl_setopt($curl, CURLOPT_BINARYTRANSFER, true);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
    }

    $response = curl_exec($curl);
    $header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
    $header_string = substr($response, 0, $header_size);
    $body = substr($response, $header_size);

    $header_rows = explode(PHP_EOL, $header_string);
    $header_rows = array_filter($header_rows,function($v){
        return trim($v);
    });
    curl_close($curl);
    return array('header'=>$header_rows,'body'=>$body);
}

$url = $_REQUEST["url"];
$url = cn_urlencode($url);

//设置客户端的头信息
$headers = array();
foreach ($_SERVER as $key => $value) {
    if ('HTTP_' == substr($key, 0, 5)) {
        $headers[] = str_replace('_', '-', substr($key, 5)).':'.$value;
    }
}

if ($method == "GET"){
    // get 提交
    /*$options = array(
        'http'=>array(
            'method'=>'GET',
            'header'=>implode('\r\n',$headers)
        )
    );*/
    $result = curl($url,$headers);
} else {
    // post 提交
    $postData = file_get_contents("php://input");
    //设置发送头信息
    /*$options = array(
        'http'=>array(
            'method'=>'POST',
            'content'=>$postData,
            'header'=>implode('\r\n',$headers)
        )
    );*/
    $result = curl($url,$headers,$postData);
}

//$stream_options = stream_context_create($options);
//$content = file_get_contents($url, false, $stream_options);

/*if(!$content){
    echo 'fail';
}else{
    foreach($http_response_header as $k=>$v){
        header($v);
    }
    echo $content;
}*/
if($result['body']){
    //设置服务端返回的头信息
    foreach($result['header'] as $k=>$v){
        header($v);
    }
    echo $result['body'];
}else{
    echo 'fail';
}
die();




客户端请求方式:

    GET请求: http://192. 168.83.133:8081/dev/api/v1/test.php?url=http://192.168.83.132:9999/svc/tiles/detailInfo/RIVERS
    (URL为服务器端需要执行的远程请求)



扩展:

    PHP-CURL:(1)需求未PHP安装CURL扩展,linux下直接执行命令(sudo apt-get install ucrl)









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值