详见代码

<?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代码不精通,未做安全检测,自己测试够用。

php服务器代理解决浏览器跨越问题的更多相关文章

  1. 项目部署问题:xftp无法连接服务器、Nginx403 Forbidden解决、nginx反向代理解决前端跨域问题

    一.xftp无法连接服务器 在xftp中配置正确的ip,用户名和密码后,居然无法连接 解决方案:将协议里面的FTP换成SFTP,注意换成SFTP后端口就默认换成22,要还是原来的21就还是连不上的哈 ...

  2. node端代理浏览器路由 解决浏览器跨域问题

    var _ = require('lodash'); var request = require("request"); /* @LM 2017-02-16 node端代理浏览器路 ...

  3. node解决跨域和服务器代理详解代码

    node中有很多解决服务器代理的插件,这里简介一个:express-http-proxy 之前网上查的使用node解决跨域的插件,有很多,例如,cors,koa2,这里解决跨域问题我拿原生解决的,ex ...

  4. 用iframe设置代理解决ajax跨域请求问题

    面对ajax跨域请求的问题,想用代理的方式来解决这个跨域问题.在服务器端创建一个静态的代理页面,在客户端用iframe调用这个代理 今天在项目中需要做远程数据加载并渲染页面,直到开发阶段才意识到aja ...

  5. 前端通过Nginx反向代理解决跨域问题

    在前面写的一篇文章SpringMVC 跨域,我们探讨了什么是跨域问题以及SpringMVC怎么解决跨域问题,解决方式主要有如下三种方式: JSONP CORS WebSocket 可是这几种方式都是基 ...

  6. 利用nginx 反向代理解决跨域问题

    说到nginx,不得不说真的很强大,也带来很多便利用于解决一些头疼的难题. 一般来说可以用来做:静态页面的服务器.静态文件缓存服务器.网站反向代理.负载均衡服务器等等,而且实现这一切,基本只需要改改那 ...

  7. nginx反向代理-解决前端跨域问题

    1.定义 跨域是指a页面想获取b页面资源,如果a.b页面的协议.域名.端口.子域名不同,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源.注意:跨域限制访 ...

  8. windows环境下 nginx+iis 反向代理解决跨域问题

    项目基本完成,是时候花点时间整理一下最近的姿势了 1 什么是跨域? 网上对于跨域的概念会有大篇幅的文章去解释,似乎有点玄乎,初学者很容易对这个概念产生恐惧,跨域其实很简单,其实只要知道一点,无法跨域访 ...

  9. nginx反向代理解决跨域问题

    跨域:浏览器从一个域名的网页去请求另一个域名的资源时,域名.端口.协议任一不同,都是跨域 . 下表格为前后端分离的域名,技术信息:   域名 服务器 使用技术 前端 http://b.yynf.com ...

随机推荐

  1. 591. Tag Validator

    Given a string representing a code snippet, you need to implement a tag validator to parse the code ...

  2. python 使用多进程实现并发编程/使用queue进行进程间数据交换

    import time import os import multiprocessing from multiprocessing import Queue, pool ""&qu ...

  3. 关于Android的Service知识点,你知道吗?

    目录 学习Service相关知识点: 概述: Service生命周期: Service的基本用法: 服务. 问:达叔,今日工作累吗? 答:累啊,那么问你,你知道Android中的 Service(服务 ...

  4. IntelliJ IDEA 注册码(因为之前的地址被封杀了,所以换了个地址)

    附上IntelliJ IDEA 注册码(感谢提供注册码的大神):http://idea.qinxi1992.cn/(已封杀) http://idea.lanyus.com/(新地址) 注:以前直接复制 ...

  5. 凉凉了,Eureka 宣布闭源,Spring Cloud 何去何从?

    今年 Dubbo 活了,并且被 Apache 收了.同时很不幸,Spring Cloud 下的 Netflix Eureka 组件项目居然宣布闭源了.. 已经从 Dubbo 迁移至 Spring Cl ...

  6. Liferay7 BPM门户开发之25: Liferay7应用程序配置(APPLICATION CONFIGURATION)

    首先有几个概念需要明确.1.第一个概念是这里的应用程序配置不是写XML之类的配置文件,是类似字典的类型化配置这意味着应用程序配置不只是一个字符串键值对的列表.值还可以有类型,如整数列表,字符串列表,一 ...

  7. spring boot -thymeleaf-逻辑控制

    th:if th:switch

  8. Python模块练习题

    练习题: 1.logging模块有几个日志级别? #INFO,WARNING,DEBUG,CRITICAL,ERROR 2.请配置logging模块,使其在屏幕和文件里同时打印以下格式的日志 2017 ...

  9. hdu 5116--Everlasting L(计数DP)

    题目链接 Problem Description Matt loves letter L. A point set P is (a, b)-L if and only if there exists ...

  10. JavaEmail-邮箱

    package service; import com.sun.mail.util.MailSSLSocketFactory;import javax.mail.Message;import java ...