React 前端导航

突破微信小程序接口https限制,通过RestTemplate转发视频资源

写在前面

最近笔者遇到了一个需求,笔者开发了一个视频提取小程序,由于微信小程序HTTPS的限制,在微信小程序上线后无法直接读取http的网络视频资源,此时需要通过HTTPS的接口请求后端服务器,然后后端执行HTTP转发,把视频资源返回到前端,下面是该功能的实现。

首先我们需要明确需求内容,微信小程序由于有服务器域名的限制,设置界面如下:

此时如果第三方资源是http的,则无法请求成功,需要转发,整个网络请求示意图如下图所示:

因此可以使用Java后台进行转发HTTP请求(因为Java应用所在的服务器,是通过HTTPS请求的)。

集成RestTemplate

集成RestTemplate的代码如下:

package cn.common.rest;
import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.http.client.ClientHttpRequestFactory;import org.springframework.http.client.SimpleClientHttpRequestFactory;import org.springframework.web.client.RestTemplate;
/** * @author Singer create by singer - Singer email:singer-coder@qq.com * @projectName multi-platform * @Description: * @date 2023-11-21 */
@Configurationpublic class RestTemplateConfig {
@Bean public RestTemplate restTemplate(ClientHttpRequestFactory factory){ return new RestTemplate(factory); }
@Bean public ClientHttpRequestFactory simpleClientHttpRequestFactory(){ SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); factory.setConnectTimeout(15000); factory.setReadTimeout(5000); return factory; }

}

进行请求转发

使用RestTemplate进行请求转发的代码如下:

@Override    public void downloadVideo(String fileUrl) throws Exception {        Long beginTime = System.currentTimeMillis();        log.info("<<<<<<<<<下载请求start:{}>>>>>>", beginTime);
log.info("download file:{}", fileUrl); /*Map<String, String> uriVariables = new HashMap<>(); uriVariables.put("fileId", downloadUrl);*/ ResponseExtractor<Boolean> responseExtractor = clientHttpResponse -> { // 设置响应头,直接用第三方文件服务的响应头 HttpHeaders headers = clientHttpResponse.getHeaders(); headers.forEach((key, value) -> response.setHeader(key, value.get(0))); /*String fileType = FileTypeUtil.getType(clientHttpResponse.getBody()); log.info("<<<<<<<<<文件类型:{}>>>>>>",fileType);*/
// 收到响应输入流即时拷贝写出到响应输出流中: inputStream -> outputStream IoUtil.copy(clientHttpResponse.getBody(), response.getOutputStream()); Long endTime = System.currentTimeMillis(); log.info("<<<<<<<<<下载耗时:{}>>>>>>", (beginTime - endTime)); return true; }; Boolean execute = restTemplate.execute(fileUrl, HttpMethod.GET, null, responseExtractor, new HashMap<String, String>()); log.info("download file success?{}", execute);
Long endTime = System.currentTimeMillis(); log.info("<<<<<<<<<下载耗时:{}>>>>>>", (endTime - beginTime)); }

声明:本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。邮箱:farmerlzj@163.com。 本站原创内容未经允许不得转载,或转载时需注明出处: 内容转载自: React前端网:https://qianduan.shop/blogs/detail/235

#小程序

相关推荐

跨端开发框架 Rax 中的路由跳转

简单减少 Rax 中提供的各种路由跳转方式,以及推荐路由的跳转方式

rax 框架开发钉钉小程序实践问题

记录使用 rax 开发钉钉小程序遇到的问题及解决方案