原理:用PHP的GET和POSt请求,实现代理访问服务器内网接口。
(代理不依赖于Nginx、Apache)

假设:
外网链接:http://127.0.0.2
内网地址:http://127.0.0.4

转发访问如下:

127.0.0.4代码

<?php
$array = array(
"php" => "php code",
"html" => "html code",
"css" => "css code",
"js" => "js code",
);
print_r(array_values($array));

127.0.0.2代码

<?php/**PHP接口代理转发:以Golang接口转发为例;如有必要,请设置内网IP为白名单;建议内网接口返回格式:Content-Type: text/html; charset=UTF-8;*使用示例:$host = "http://127.0.0.2"; // 外网网址(主网址或有部分路径)$intranet = 'http://127.0.0.4'; // 内网网址(主网址或有部分路径)$php_proxy = new php_proxy();$back = $php_proxy->request_intranet($host, $intranet);echo $back;* */
class php_proxy{// 发送get、post请求public function request_option($request_url='', $method='post', $request_data=[], $to_json=false): string{if (empty($request_url)) {$back = '{"state":0, "msg":"request_url is null", "content":""}';}else{if ($method == 'post' || $method == 'POST'){$body = http_build_query($request_data);$options = ['http' => ['method' => 'POST', // 注意要大写'header' => 'Content-type:application/x-www-form-urlencoded','content' => $body,'ignore_errors'=> true, // 忽略报错,直接返回接口内容],];$context = stream_context_create($options);$data = file_get_contents($request_url, false, $context);}else if ($method == 'get'|| $method == 'GET'){$curl = curl_init();curl_setopt($curl, CURLOPT_URL, $request_url);curl_setopt($curl, CURLOPT_HEADER, 0); // 不抓取头部信息。只返回数据curl_setopt($curl, CURLOPT_TIMEOUT, (int)60000); // 超时设置curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 1表示不返回bool值$data = curl_exec($curl);// $code = curl_getinfo($curl, CURLINFO_HTTP_CODE); // 获取接口状态码curl_close($curl);}else{$data = '{"state":0, "msg":"method error. method is only in [get, post], options etc be not supported.", "content":""}';}$back = $data;}if ($to_json == true){$res = json_encode($back, true);}else{$res = $back;}return $res;}// 获取完整网址public function get_url(): string{if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') {$url = 'https://';}else{$url = 'http://';}return $url.$_SERVER['SERVER_NAME'].':'.$_SERVER['SERVER_PORT'].$_SERVER['REQUEST_URI'];}// 是postpublic function is_post(): bool{return isset($_SERVER['REQUEST_METHOD']) && strtoupper($_SERVER['REQUEST_METHOD']) == 'POST';}// 是getpublic function is_get(): bool{return isset($_SERVER['REQUEST_METHOD']) && strtoupper($_SERVER['REQUEST_METHOD']) == 'GET';}// 生成内网网址:把外网网址解析到内网网址public function make_request_url($host, $intranet): string{return str_replace($host, $intranet, $this->get_url()); // 实际代理地址(就是替换主网址或路径)}// 转发接口// 请从此处调用public function request_intranet($host, $intranet): string{// 测试的内网请求地址:$request_url = http://127.0.0.l:8000/api.gen1/admin$request_url = $this->make_request_url($host, $intranet);if ($this->is_post()){$request_array = $_REQUEST; // 请求参数数组$back = $this->request_option($request_url, 'post', $request_array, false);}else if ($this->is_get()){$request_array = [];$back = $this->request_option($request_url, 'get', $request_array, false);} else{$back = '{"state":0, "msg":"method error. method is only in [get, post], options etc be not supported.", "content":""}';}return $back;}}// 返回数据
$host = "http://127.0.0.2"; // 外网网址(主网址或有部分路径)
$intranet = 'http://127.0.0.4'; // 内网网址(主网址或有部分路径)
$php_proxy = new php_proxy();
$back = $php_proxy->request_intranet($host, $intranet);
echo $back;

PHP_代理转发接口相关推荐

  1. nginx小知识 :通过nginx代理转发接口地址

    通过域名,访问http://admin.ceshi.com/station/api/list接口,代理到tomcat, 想要的效果是这样:http://101.*89:8080/station/api ...

  2. .NET Core 实例接口代理转发

    先讲讲本文的开发背景吧.. 在如今前后端分离的大背景下,咱的客户又有要求啦~ 要前后端分离~ 然因为种种原因..没办法用用纯前端的框架(其实是学习成本高,又没钱请前端开发人员)... 所以最终决定了一 ...

  3. vercel和netlify部署代码并解决接口代理转发的问题(和Nginx功能一样)

    前言 部署过程就不说了,部署完成后是这样子的 然后访问链接,无法访问 解决 依次点击 Settings–>Domains,在输入框中输入你的域名并点击 Add 按钮. 以此域名为例子demo.g ...

  4. 跨域问题解决方案--Nginx代理转发

    文章目录 问题描述 解决方案 问题描述 有这么一个html页面,具体代码如下: Nginx_CORS.html <!DOCTYPE html> <html lang="en ...

  5. Eginx配置(SSL,令牌登录认证,IP白名单,代理转发)

    一般需要对接银行的接口,都需要用前置机,在前置机上安装银行的客户端(CBS).我们接口调用的实际是前置机上的http服务. 为了数据安全,一般会把前置机的网络和服务器的网络处理成同一个内网,防止数据被 ...

  6. 内网渗透-msf及socks代理转发

    0x00 学习环境 拓扑如上,现在已经拥有了WIN2008的meterpreter权限 希望通过此主机进行代理转发,从而使msf能够攻击WIN7从而拿到权限. 0x01 路由转发1 先在meterpr ...

  7. 通过 Nginx 代理转发配置实现跨域(API 代理转发)

    通过 Nginx 代理转发配置实现跨域(API 代理转发) 阅读 2285 收藏 119 2017-04-08 原文链接:www.thinktxt.com 1元视频体验视频通话10000分钟cloud ...

  8. Nginx的Https配置及代理api接口配置

    文章介绍nginx如何配置https并配置代理java接口 1.获取证书 使用certbot生成证书:如何生成证书? (1)将cert.pem复制到该工具进行解析 进入工具网站转换pem (2)解析完 ...

  9. 内网渗透代理转发详解及工具介绍

    介绍一下个人网站 欢迎各位大佬光顾 http://www.sec0nd.top 文章目录 前言 正向代理和反向代理 正向代理 反向代理 举例辨别两者 内网渗透中代理的作用 工具介绍 msf nps f ...

最新文章

  1. 线段树专辑——pku 2886 Who Gets the Most Candies?
  2. 面试官让我手写一个生产者消费者模式?
  3. pd.get_dummies
  4. scrum 敏捷开发
  5. python meshgrid_torch.meshgrid()和np.meshgrid()的区别
  6. netflix 工作原理_Netflix如何在屏幕后面工作?
  7. 选择一本适合自己的Linux系统书籍
  8. 理解WordPress的PingBack和TrackBack
  9. 首批拟科创板IPO名单今日揭晓!
  10. 公式化学习urllib(第一卷)
  11. 官方数据:程序员年纪越大越出色、越稀有
  12. centos 7 修改ip
  13. 【vn.py】开发环境搭建
  14. 【STM8】STM8在STVD平台生成HEX和S19文件的方法
  15. 支持python的云虚拟主机_云虚拟主机运行python(能运行python的主机)
  16. STEP 标准基础概念-刘亚龙
  17. 无需下载,优质网站分享
  18. 深入理解java虚拟机(六)GC垃圾回收-低延迟垃圾收集器(Shenandoah、ZGC)
  19. 基于ZedBoard的Webcam设计(二):USB摄像头图片采集+QT显示
  20. 规划新一年 IT 技术路线?一起来学习下 Gartner 基础设施 Hype Cycle

热门文章

  1. 物理实验-用牛顿环法测球面的曲率半径 实验报告 重庆理工大学
  2. 解决wps打印ppt多合一时ppt之间有空白的问题
  3. Win11电脑桌面的图标变成白色了怎么解决?
  4. Python求数据集的四分位点
  5. 西门子S120运动控制西门SimotionStarte r运 动控制实例 西门子工业自动化运动控制行业一站式集齐
  6. 基于ZYNQ的片上系统(Soc)简介(一)
  7. 技术好远远不够,寻找这三个不可替代性才最重要!
  8. Linux文件管理 FHS
  9. 开发日志 2015-03-29
  10. EMQ 携手 NNG 联合发布新一代超轻量边缘 MQTT 消息引擎 NanoMQ