微信小程序http连接访问解决方案示例
HTTP加密认证完整性保护=https。考虑到信息安全问题,小程序选择了一个更加稳定安全的HTTPS进行信息传输。
HTTPS协议的主要功能可以分为两种:一种是建立信息安全通道,保证数据传输的安全性;另一个是确认网站的真实性。
因此,许多有用的http API在小程序中无法调用。
但是有解决办法。
1.中继接入
接入中继有两种方式,一种是拥有云服务和域名。
拥有域名和云服务器
域名备案后下载证书
https指南教程如下:
HTTPS在腾讯云上免费部署
谈谈域名解析到你的云服务器的IP。
这样,你的域名是https,小程序可以访问你的服务器,现在你可以访问云服务上的http API服务
其实只需要对小程序和API Server做一个双面的响应。
要实现这个功能,很明显,在服务器上部署一个Web项目是实现它最简单的方法:
让我们以豆瓣图书API的访问为例:https://api.douban.com/v2/book/isbn/
豆瓣API虽然是https,但是禁止小程序访问。以下代码也适用于http连接
Java代码:
这是通用代码,无论您访问什么样的应用编程接口
打包DataService导入Java . io . bufferedeer;导入Java . io . ioexception;导入Java . io . InputStream;导入Java . io . InputStreamReader;导入Java . io . outputstreamwriter;导入Java . io . printwriter;导入Java . net . httpurlconnection;导入Java . net . URL;导入Java . net . URl connection;导入Java . SQL . resultset;import.com . Google . gson . Gson;/* * Author:陈浩东* QQ :1025584691 */公共类doubanbook {//豆瓣接口实现公共静态字符串dopost(字符串URL、字符串参数、Integer connTimeout、Integer readTimeout、String content type){ PrintWriter out=null;BufferedReader in=null字符串结果=' ';尝试{ URL realUrl=新的URL(网址);//打开和URL之间的连接,按照URL URL connectionconn=real URL . open connection();//设置general request属性conn . setrequest property(' accept ',' */*);conn.setRequestProperty('连接',' Keep-Alive ');conn . setrequestproperty(' user-agent ',' Mozilla/4.0(兼容;MSIE 6.0Windows NT 5.1SV1)');conn . setrequestproperty(' Content-Type ',contentType==null?application/JSON ' : ContentType);//发送POST请求必须设置以下两行:conn . setdooutput(true);conn.setDoInput(真);//设置请求超时和读取超时conn . setconnecttimeout(conn time out==null?180 : connTimeoutconn . setreadtime out(readtime out==null?180 : read time out);//获取URLConnection对象对应的输出流,设置utf-8编码out=new print writer(new outputstreamwriter(conn . getoutputstream(),' utf-8 '));//发送请求参数out . print(params);//刷新输出流的缓冲区out . flush();//定义buffere reader输入流读取URL响应,并在=new buffere reader(new input stream reader(conn . getinputstream(),' utf-8 ')中设置utf-8编码;字符串;while ((line=in.readLine())!=null)结果=行;} catch(异常e){ e . printstacktrace();结果=null}//使用finally块关闭输出流和输入流finally {try {if (out!=null){ out . close();} if (in!=null){ in . close();} } catch(IOexception ex){ ex . printstacktrace();} }返回结果;}}根据访问不同的API,只需要修改Servlet的编写:
Servlet:
包小型应用程序导入Java。io。ioexception导入Java。io。作家;导入Java。乌提尔。HashMap导入Java。乌提尔。地图;导入javax。servlet。servletexception导入javax。servlet。注释。webservlet导入javax。servlet。http。HttpServlet导入javax。servlet。http。HttpServletrequest导入javax。servlet。http。HttpServletResponse进口。com。谷歌。gson。Gson导入数据服务。豆瓣书;/** * Servlet实现类doubanbook */@ WebServlet('/doubanbook ')公共类豆瓣书扩展了HttpServlet {受保护的void doGet(httpersvletrequest请求,HttpServletResponse响应)引发ServletException,IOException { request。setcharacter编码(' utf-8 ');回应。setcontenttype(' text/html;charset=utf-8 ');回应。setheader('访问控制-允许-源',' * ');response.setHeader('访问控制-允许-方法,GET,POST’);字符串ISBN=请求。GetParameter(' ISBN ')==null?否' :请求。GetParameter(' ISBN ');字符串ssh pwd=请求。GetParameter(' ssh _ secret ')==null?否' :请求。GetParameter(' ssh _ secret ');系统。出去。println(ssh pwd);系统。出去。国际标准书号;映射字符串,对象结果=新HashMapString,对象();String json=new Gson().toJson(结果);writer out=响应。getwriter();出去。写(豆瓣本。DoPost(' https://API。豆瓣。com/v2/book/ISBN/' ISBN,null,null,null,null));出去。flush();}受保护的void doPost(httpersvletrequest请求,HttpServletResponse响应)引发ServletException,IOException { //TODO自动生成的方法存根doGet(请求,响应);}}同样,你也可以用Python,php等语言来实现中继访问这个功能。
无域名和云服务器
对于个人开发者来说,尤其是学生来说,又是是没有条件购买长时间的云服务器的,这个时候我们如果是开发小程序的话,可以用他们提供的空间。
使用微信小程序的云开发能力,Node.js函数,用射流研究…实现服务端的响应,访问非https API。
参照写法一:
云函数调用方式访问应用程序接口
const cloud=require(' wx-server-SDK ')cloud。init()//云函数入口函数exports.main=async(事件,上下文)={ console.log(事件)console.log(上下文)返回新承诺(解析,拒绝)={ var URL=event.url//前端小程序传的data var https=require(' https ');https.get(url,函数(RES){ var size=0;var chunks=[];res.on('data ',function(chunk){ size=chunk。长度;大块的。推送(组块);});res.on('end ',function(){ var data=buffer。concat(组块,大小)。toString();console.log(数据)解析(JSON.parse(数据))});}).on('error ',(e)={ console。日志(` URL : $ { URL }错误: $ { e . message } `));});})}不知道什么原因,云函数我感觉并不是很稳定,建议有条件的还是用自己的服务器来实现吧。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
版权声明:微信小程序http连接访问解决方案示例是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。