调用外部接口报403错误的解决办法

问题发现

      最近写一个在线音乐播放项目时,发现了一个问题。就是在项目中调用的是百度音乐的api,当把音乐的url放入audio的src属性中时,点击播放,则会报403错误。然而直接在浏览器的地址栏直接回车就不会出错。

这里写图片描述
这里写图片描述

报403错误的原因

首先,报403错误的原因需要提及浏览器的防盗链机制。

防盗链机制

      当你的项目和需要引用的网址不在同一个域内的,那么浏览器的防盗链机制发挥作用。

       其中防盗链是利用HTTP header 中的referer来实现的。当浏览器向服务器发送请求时会带上referer,来告诉服务器从哪个页面链接过来的。

       服务器端通过referer来判断请求是否是自己的域名,如果不是自己的域名就会拦截,不会将请求发送出去,如果是自己域名那么就继续访问。

请求发送成功的请求头Request Headers:
这里写图片描述
请求为发送成功的请求头 Request Headers:
这里写图片描述

解决办法

由于防盗链是由于请求的域名和当前域名不相同才拦截请求的,因此,双击打开就不会出现403错误,然而这并不符合实际应用。

因此,利用iframe来解决问题。

以下封装了一个方法,在iframe中添加audio标签,设置外部接口音乐的url,播放音乐(这里以百度音乐api为例)

代码如下:

var url = "http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.song.playAAC&songid=";
var songId = "583772902";
//通过该方法,会将播放songId=583772902的音乐的url放入iframe的audio中。
 useIframe($(".playing-audio iframe"),url,songId);

//origin是页面中iframe标签元素
//url为要播放的音乐的url
//songId为播放音乐的歌曲的id(以这个id和url来获取到播放url)
function useIframe(origin,url,songId) {
        //定义一个id值
        var frameid = 'frameaudio';
        //为iframe内部设置一个audio标签,设置src属性以及值
        window.content = '<audio id="audio" src="'+url+songId+'" ></audio>';
        //设置iframe元素的id值
        $(origin).get(0).id=frameid;
        //将内容加入到该iframe中
        $(origin).get(0).src="javascript:parent.content;";
        //设置iframe标签的一些样式
        $(origin).get(0).frameBorder="0";
        $(origin).get(0).scrolling="no";
        $(origin).get(0).width="100%";
    }
<div class="playing-audio" style="display: none;">
    <iframe src="" frameborder="0"></iframe>
</div>

注意:
    在上述代码中,iframe中的audio标签的src属性值,是一个用来获取音乐url的网址,并不能直接播放,它返回的是一个json字符串。
需要通过ajax来获取到它的播放url

有图可得到,iframe标签中其实是包裹了另外一个页面。

利用ele.contentWindow.document来获取中的元素

如: $(“iframe”).get(0).contentWindow.document.querySelector(“audio”)
这里写图片描述

我们还需要通过一些代码设置iframe元素内的audio标签的实际播放url,解决403问题。(这里使用了异步获取百度音乐api的url)

//获取到iframe标签内的audio属性
var audioEle = $(".playing-audio iframe").get(0).contentWindow.document.querySelector("audio");
$.ajax({
     dataType: "jsonp",
     //这里的url和songId对应上述js代码中的url和songId
     url: url+songId,
     type: "get",
     success: function (data) {
         //获得的data中有播放音乐的url
         //由于是json格式,因此data.bitrate.show_link就是对应的播放地址
         audioEle.src = data.bitrate.show_link;
         这里可以添加一些其他代码,用来设置audio标签...      
    }
});


  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
厂区监控系统的设计方案 1. 系统概述 安全防范项目是企业管理的一个重要组成部分,也是体现安全保卫功能先进性的重要 环节。为了充分体现现代大型企业的时代特色,我们采用了国内最先进的基于数字安防 产品,为贵企业提供功能齐全、应用新颖、投资合理的方案。在本次设计中充分体现出 可持续发展的理念,利用网络技术及数字图像处理技术提供多种综合服务功能。 利用网络(LAN)扩展传统模拟CCTV系统以及利用现有网络建立数字化视频监视系统 可以为用户节省投资、提高系统的开放性以及带来额外的投资回。 通过将模拟视频数字化、网络化,网络内部、外部的使用者(user)可以通过网络随 时、随地观看现场清晰的视频图像,不必再向传统的模拟CCTV系统那样需要敷设大量的 电缆,节省了贵方的投资。 1.1基本需求 根据现有数据和需求情况,视频监控系统方案设想是集安全生产、防盗、防火、和内 部管理于一体的技术防范手段,系统要求达到的目的是:有效监控人员情况、重大活动 现场秩序、火灾情况及防盗等。 1.2监视点配置情况 系统共设计有26台摄像机,分别设计在的各类主要出入口、走廊、内部的主要公用设 施场所、内人群密度较大的流动区域和集散地、办公室内等进行现场实时监视,以保证 可以有效地杜绝隐患发生等。 摄像机具体安装地点: 根据厂方的要求,放置相应的位置。 方案视为全部摄像机视频资料要求格式实时存储,按照每路视频每小时150- 200Mbps(根据图像动态程度)计算,单个存储服务器(本系统为分布式结构,可设置多 个存储服务器分布式存储)可同时存32路图像,用户可根据上述参数配置存储服务器及 硬盘空间。本系统我们配置了1台32路的硬盘录像机,可同时录制32路图像,用了2块1T B的硬盘,共2000G的存储空间,32路图像24小时录制的话,可录15天以上。 1.4视频监控系统的作用和要求 本系统的主要作用有两个方面。管理防范和功能。 1.4.1管理 内部人员日常工作的管理:考勤、值班情况等。具体方法为,如:考勤,在主要通 道口设置监控点通过图像记录来反映具体管理情况。防火。 解决纠纷 防盗、寻找失物。通过调用物品丢失过程的图像资料。 通过与警系统联动(视频服务器配置了3个警输入1个警输出支持开关量和脉 冲),如有非法入侵的情况,探测器将警信号送给视频服务器,在监控中心的 屏幕上弹出警点的视频,同时系统控制球机监看现场情况,以便保安人员以及 警方抵达现场。 1.4.2 主要功能 录像功能 1、录像模式:手动录像、定时录像、移动检测录像、警录像,支持录像内容 的分类检索,每路视音频录像参数均可单独设置。 2、视频移动动态检测功能,每路视频可设置多个动态检测区域,可以实现实时 画面全屏蔽,全屏蔽状态的时候录像不会被屏蔽。 3、管理主机可通过网络实时纪录压缩码流,支持借助网络将图像声音同步直接 录入电脑。 4、支持通道名叠加,支持通道录像日期、时间叠加,支持图标叠加、局部马赛 克和遮盖。 放像功能 1、本地放像:精确时间定位放像、手动录像内容检索放像、定时录像内容检索 放像、移动检测录像内容检索放像、警录像内容检索放像。 2、支持管理主机本地回放通过网络实时纪录压缩码流。 3、支持画中画放像,可以使用客户端管理器达到多路回放的放像模式,不影响 实时图像以及录像。 4、支持管理主机安装HB1500系列视频编码卡直接输出视频在电视墙上显示。 5、支持 4 个级别的快放、 4 个级别慢放、4个级别倒放、暂停、单帧回放模式 ;按时间回放定位准确。 实时监看监听功能 1、支持本地监视器和VGA显示器显示,支持电视墙功能。 2、支持每个通道录像参数(亮度、对比度、色度、饱和度)的调节。 3、显示模式( 1路/4路/8路/9路)切换迅速,没有延迟,支持画中画模式;支 持画面轮巡功能,可以根据需要自由设置是否启用轮巡以及轮巡的时间。 4、支持回放、预览同时进行。 存储备份功能 1、主机提供USB 2.0 备份专用接口,远程通过客户端管理器备份录像机中的录 像内容。 2、强大的硬盘管理功能,支持正常运行状态下对硬盘进行格式化,系统自动实 现硬盘扇区损坏跳过功能。 3、标准 FAT32 文件系统格式,录像文件可在 PC 系统上识别,并可在安装随机 光盘内的播放软件后播放。 警检测功能 1、本地警:视频丢失警、移动侦测警(140个动态检测区域)、探头触发 警、未接硬盘提示、硬盘无空间提示、视频异常检测、磁盘错误扇区检测。 2、远程警:视频丢失警、移动侦测警、探头触发警,可以通过网络远 程传送给客户端,借助客户端,可以实现警录像自动打开。 3、视频丢失警信息、移动侦测警信息、探头触发警信息可以通过外接设 备警到手机、呼机、或者固定电话(例如:110)。 4、
1. 前提 2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 实现方案的隐藏 1.4 方案的重复使用 1.5 继承:重新使用接口 1.5.1 改善基础类 1.5.2 等价和类似关系 1.6 多形对象的互换使用 1.6.1 动态绑定 1.6.2 抽象的基础类和接口 1.7 对象的创建和存在时间 1.7.1 集合与继承器 1.7.2 单根结构 1.7.3 集合库与方便使用集合 1.7.4 清除时的困境:由谁负责清除? 1.8 违例控制:解决错误 1.9 多线程 1.10 永久性 1.11 Java和因特网 1.11.1 什么是Web? 1.11.2 客户端编程 1.11.3 服务器端编程 1.11.4 一个独立的领域:应用程序 1.12 分析和设计 1.12.1 不要迷失 1.12.2 阶段0:拟出一个计划 1.12.3 阶段1:要制作什么? 1.12.4 阶段2:开始构建? 1.12.5 阶段3:正式创建 1.12.6 阶段4:校订 1.12.7 计划的回 1.13 Java还是C++? 第2章 一切都是对象 2.1 用句柄操纵对象 2.2 必须创建所有对象 2.2.1 保存在什么地方 2.2.2 特殊情况:主类型 2.2.3 Java中的数组 2.3 绝对不要清除对象 2.3.1 作用域 2.3.2 对象的作用域 2.4 新建数据类型:类 2.4.1 字段和方法 2.5 方法、自变量和返回值 2.5.1 自变量列表 2.6 构建Java程序 2.6.1 名字的可见性 2.6.2 使用其他组件 2.6.3 static关键字 2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入HTML 2.8.4 @see:引用其他类 2.8.5 类文档标记 2.8.6 变量文档标记 2.8.7 方法文档标记 2.8.8 文档示例 2.9 编码样式 2.10 总结 2.11 练习 第3章 控制程序流程 3.1 使用Java运算符 3.1.1 优先级 3.1.2 赋值 3.1.3 算术运算符 3.1.4 自动递增和递减 3.1.5 关系运算符 3.1.6 逻辑运算符 3.1.7 按位运算符 3.1.8 移位运算符 3.1.9 三元if-else运算符 3.1.10 逗号运算符 3.1.11 字串运算符+ 3.1.12 运算符常规操作规则 3.1.13 造型运算符 3.1.14 Java没有“sizeof” 3.1.15 复习计算顺序 3.1.16 运算符总结 3.2 执行控制 3.2.1 真和假 3.2.2 if-else 3.2.3 反复 3.2.4 do-while 3.2.5 for 3.2.6 中断和继续 3.2.7 切换 3.3 总结 3.4 练习 第4章 初始化和清除 4.1 由构建器保证初始化 4.2 方法过载 4.2.1 区分过载方法 4.2.2 主类型的过载 4.2.3 返回值过载 4.2.4 默认构建器 4.2.5 this关键字 4.3 清除:收尾和垃圾收集 4.3.1 finalize()用途何在 4.3.2 必须执行清除 4.4 成员初始化 4.4.1 规定初始化 4.4.2 构建器初始化 4.5 数组初始化 4.5.1 多维数组 4.6 总结 4.7 练习 第5章 隐藏实施过程 5.1 包:库单元 5.1.1 创建独一无二的包名 5.1.2 自定义工具库 5.1.3 利用导入改变行为 5.1.4 包的停用 5.2 Java访问指示符 5.2.1 “友好的” 5.2.2 public:接口访问 5.2.3 private:不能接触 5.2.4 protected:“友好的一种” 5.3 接口与实现 5.4 类访问 5.5 总结 5.6 练习 第6章 类再生 6.1 合成的语法 6.2 继承的语法 6.2.1 初始化基础类 6.3 合成与继承的结合 6.3.1 确保正确的清除 6.3.2 名字的隐藏 6.4 到底选择合成还是继承 6.5 protected 6.6 递增开发 6.7 上溯造型 6.7.1 何谓“上溯造型”? 6.8 final关键字 6.8.1 final数据 6.8.2 final方法 6.8.3 final类 6.8.4 final的注意事项 6.9 初始化和类装载 6.9.1 继承初始化 6.10 总结 6.11 练习 第7章 多形性 7.1 上溯造型 7.1.1 为什么要上溯造型 7.2

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值