<?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)