php服务器代理解决浏览器跨越问题

详见代码

<?php

$url = $_SERVER["QUERY_STRING"];

switch ($_SERVER['REQUEST_METHOD']) {
    case "GET":
        curlget($url);
        break;
    case "POST":
        $CONTENT_TYPE = explode(';',$_SERVER['CONTENT_TYPE']);
        switch($CONTENT_TYPE[0]) {
            case 'application/x-www-form-urlencoded':
                $data = http_build_query($_POST);
                break;
            case 'multipart/form-data':
                $tempname = $_FILES['file']['tmp_name'];
                $basename = basename($_FILES['file']['name']);
                $origname = sys_get_temp_dir() . '/' . $basename;
                move_uploaded_file($tempname, $origname);
                chdir(sys_get_temp_dir());
                $data = array('name' => 'file', 'filename' => '@' . $basename);
                break;
            default:
                exit;
        }
        curlpost($url, $data);
        break;
    default:
        exit;
}


function curlget($url) {
  $ch = curl_init($url);
  curl_setopt($ch, CURLOPT_HEADER, false);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  if (strpos($url,"https") >= 0) {
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  }
  $data = curl_exec($ch);
  if ($data === false) {
    header('HTTP/1.1 400 Bad Request');
    exit;
  } else {
  echo $data;
  }
}

function curlpost($url, $data) {
  $ch = curl_init($url);
  curl_setopt($ch, CURLOPT_HEADER, false);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  if (strpos($url,"https") >= 0) {
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  }
  $data = curl_exec($ch);
  if ($data === false) {
    header('HTTP/1.1 400 Bad Request');
    exit;
  } else {
  echo $data;
  }
}
?>

如何使用:

1.把上面代码建立一个proxy.php的文件,放到PHP的后台服务器

2.在浏览器端用js访问,以jquery代码为例

$.ajax({
    url: "http://www.phphost.com/proxy.php?https://www.example.com/someApi",
    type: 'post',
    data: {
        a: "123",
        b: "456"
    },
    dataType: 'json',
    success: function(result){
        // do some things
    }
});

其中访问地址的格式是 PHP服务器地址+/proxy.php? + 需要跨域访问的接口;get、post 请求均可;

借鉴了https://www.cnblogs.com/zoho/archive/2012/07/03/2575380.html这里的代码,

增加了对https协议的支持。

由于本人PHP代码不精通,未做安全检测,自己测试够用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值