axure使用nginx反向代理完美解决接口跨域问题

问题描述

在使用axure请求接口的过程中,由于浏览器安全策略的限制,常常会遇到跨域问题,如下图:
image.png

解决思路

解决跨域有很多办法,本文将使用nginx反向代理来解决跨域问题。实现原理将axure的请求发送到代理服务器,由代理服务器进行请求转发。

image.png

解决步骤

准备axure

文章以网易云搜索接口http://interface.music.163.com/weapi/search/get为例,使用axure请求该接口。

  • 页面增加载入事件,添加打开链接,增加以下js代码。该代码主要用请求接口的加密处理。

image.png

javascript:
/*导入js*/
$axure.utils.loadJS("https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/crypto-js/4.1.1/crypto-js.min.js");
  • 在axure中添加搜索框,添加单机事件,打开链接中增加js代码。

image.png

javascript:
/*加密*/
function encrypt(str, str2) {
  const key = CryptoJS.enc.Utf8.parse(str2);
  const iv = CryptoJS.enc.Utf8.parse("0102030405060708");
  const encrypted = CryptoJS.AES.encrypt(str, key, {
    iv: iv,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
  });
  return encrypted.toString();
};


/*加密请求参数*/
function encryptedParam(str){
   return encrypt(encrypt(str, "0CoJUm6Qyw8W8jud"), "a44e542eaac91dce");
};

/*获取加密参数*/
function getParam(i, i2, keyword) {
    var s = JSON.stringify({"s":keyword,"offset":i*i2,"limit":i2,"type":"1","strategy":"0","queryCorrect":"true"});
    return encryptedParam(s);
};
console.log(getParam(1,30,"周杰伦"));

var encSecKey = "411571dca16717d9af5ef1ac97a8d21cb740329890560688b1b624de43f49fdd7702493835141b06ae45f1326e264c98c24ce87199c1a776315e5f25c11056b02dd92791fcc012bff8dd4fc86e37888d5ccc060f7837b836607dbb28bddc703308a0ba67c24c6420dd08eec2b8111067486c907b6e53c027ae1e56c188bc568e";

/*获取输入关键词*/
var keyword=$('[data-label=keyword] input').eq(0).val();
var page=$('[data-label=page] span').eq(0).text();
console.log("当前页"+page);
/*请求搜索接口*/
/*重要提示:以下接口即为nginx中配置的代理接口地址*/
var url="http://127.0.0.1:8080/weapi/search/get";
var data={
   params:getParam(parseInt(page),10,keyword),
   encSecKey:encSecKey
};
$.ajax({
  url:url,
  type:"POST",
  data: data
}).done(function(result){
  var songs=JSON.parse(result)["result"]["songs"];
  console.log('第'+page+'数据:::::'+songs);
  /*遍历填充值*/;
  var s="";
 
  console.log(songs);
  for(var i=0;i<songs.length;i++){
      var artists=songs[i]["artists"];
      var a="";
      console.log(JSON.stringify(artists));
      for(var j=0;j<artists.length;j++){
          a=a+artists[j]["name"]+"&";
      };
      a=a.slice(0,-1);
      s=s+(i+1).toString()+"@"+songs[i]["id"]+"@"+songs[i]["name"]+"@"+a+"@"+songs[i]["album"]["name"]+"#";
  };
  s=s.slice(0,-1);
  $axure.setGlobalVariable("result", s);
}).fail(function(jqXHR,status,error){
  alert(error);
});

文末提供axure文件的下载地址,可以查看详细的操作。

下载nginx

image.png

发布html
  • 将axure生成html,将解压后的nginx放入解压后的目录中,如下图
    image.png

  • nginx\conf目录下复制nginx.conf,并粘贴至项目目录。

image.png
image.png
image.png
image.png

  • 修改项目根目录下中的nginx.conf,如下:
        # 允许跨域请求的域, * 表示所有
        add_header 'Access-Control-Allow-Origin' *;
        # 允许携带Cookie
        add_header 'Access-Control-Allow-Credentials' 'true';
        # 允许请求的方式 比如常用的Restful GET/PUT/POST/DELETE
        add_header 'Access-Control-Allow-Methods' *;
        # 允许请求的header
        add_header 'Access-Control-Allow-Headers' *;

        # 代理的接口配置
        location /weapi/search/get {
            proxy_pass http://interface.music.163.com/weapi/search/get;
        }

image.png

启动和关闭

为了更加方便启动和关闭原型和nginx,这里在根目录中增加2个批处理文件。
image.png

  • 启动脚本start.bat
@echo off

REM 设置命令行编码,防止乱码
chcp 65001 > nul

REM 获取当前路径作为根路径
set root_path=%cd%

REM 设置 Nginx 的安装路径
set nginx_path=%root_path%\nginx

REM 设置 HTML 文件的路径
set html_path=%root_path%\start.html

REM 检查 Nginx 是否已经启动
tasklist /FI "IMAGENAME eq nginx.exe" 2>NUL | find /I /N "nginx.exe">NUL
if "%ERRORLEVEL%"=="0" (
    REM Nginx 已经启动,执行重载操作
    echo Reloading Nginx...
    cd %nginx_path%
    nginx.exe -s reload
) else (
    REM Nginx 未启动,执行启动操作
    echo Starting Nginx...
    cd %nginx_path%
    start nginx.exe
)

REM 等待 Nginx 启动完成
timeout /t 2 >nul

REM 打开浏览器并访问本地 HTML 文件
echo Opening browser...
start "" "%html_path%"

REM 结束脚本
exit
  • 关闭脚本stop.bat
@echo off
REM 设置命令行编码,防止乱码
chcp 65001 > nul

REM 获取当前路径作为根路径
set root_path=%cd%

REM 设置 Nginx 的安装路径
set nginx_path=%root_path%\nginx

REM 关闭 Nginx
echo Stopping Nginx...
cd %nginx_path%
nginx.exe -s stop

REM 结束脚本
exit
实现效果

image.png

  • html和nginx中下载地址:https://www.123pan.com/s/J5Nsjv-luBN.html 提取码:Wdqu
  • rp文件下载地址:https://www.123pan.com/s/J5Nsjv-7uBN.html 提取码:UOa2
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值