HTTP + 加密 + 认证 + 完整性保护 = HTTPS,小程序考虑到信息安全的问题,选用了更为稳定安全的https 来进行信息传递。

HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。

这就导致了许多好用的http  API无法在小程序中被调用。

但是也有解决方案。

1.中继访问

中继访问有两种方式,一种需要自己拥有一个云服务和域名。

拥有域名和云服务器

域名完成备案之后下载证书

https指引教程如下------>

再讲域名解析到你的云服务器的IP。

这样子你的域名就是https的了,小程序可以访问你的服务器了,现在就开始在云服务上实现访问http API 服务

实际上只需要面向小程序和API Server 做一个双面响应即可。

实现这种功能,显而易见,在服务器上部署一个Web项目是最简单的实现方式:

我们以访问豆瓣图书API 为例:https://api.douban.com/v2/book/isbn/

豆瓣API虽然是https的,但是来自小程序的访问是被禁止的。下面代码同样适用于http 连接

Java代码:

这个是通用代码,无论是访问什么API

packageDataService;importjava.io.BufferedReader;java.io.IOException;java.io.InputStream;java.io.InputStreamReader;java.io.OutputStreamWriter;java.io.PrintWriter;java.net.HttpURLConnection;java.net.URL;java.net.URLConnection;java.sql.ResultSet;com.google.gson.Gson;/** Author:陈浩东

* QQ:1025584691*/

public classDouBanBook {//豆瓣接口实现

staticString doPost(String url,String params,Integer connTimeout,Integer readTimeout,String contentType)

{

PrintWriter out= null;

BufferedReader in= ;

String result= "";try{

URL realUrl= newURL(url);打开和URL之间的连接,根据url

URLConnection conn =realUrl.openConnection();设置通用的请求属性

conn.setRequestProperty("accept","*/*");

conn.setRequestProperty("connection","Keep-Alive");

conn.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");

conn.setRequestProperty("Content-Type",contentType == null? "application/json": contentType);发送POST请求必须设置如下两行

conn.setDoOutput(true);

conn.setDoInput();设置请求超时时间和读取超时时间

conn.setConnectTimeout(connTimeout == null ? 180: connTimeout);

conn.setReadTimeout(readTimeout== : readTimeout);获取URLConnection对象对应的输出流,设置utf-8编码

out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(),"utf-8"));发送请求参数

out.print(params);flush输出流的缓冲

out.flush();定义BufferedReader输入流来读取URL的响应,设置utf-8编码

in = new BufferedReader(new InputStreamReader(conn.getInputStream(),1)">));

String line;

while ((line = in.readLine()) != )

result+=line;

}catch(Exception e)

{

e.printStackTrace();

result= ;

}使用finally块来关闭输出流、输入流

finally{{if (out != )

{

out.close();

}if (in != )

{

in.close();

}

}(IOException ex)

{

ex.printStackTrace();

}

}returnresult;

}

}

根据访问不同的API,只需要修改Servlet的写法就可以:

Servlet:

Servlet;java.io.Writer;java.util.HashMap;java.util.Map;javax.servlet.ServletException;javax.servlet.annotation.WebServlet;javax.servlet.http.HttpServlet;javax.servlet.http.HttpServletRequest;javax.servlet.http.HttpServletResponse;DataService.DouBanBook;/*** Servlet implementation class doubanbook*/@WebServlet("/doubanbook")class doubanbook extendsHttpServlet {protected void doGet(HttpServletRequest request,HttpServletResponse response) throwsServletException,IOException {

request.setCharacterEncoding("utf-8");

response.setContentType("text/html;charset=utf-8");

response.setHeader("Access-Control-Allow-Origin","*");

response.setHeader("Access-Control-Allow-Methods","GET,POST");

String isbn= request.getParameter("isbn")==null?"no":request.getParameter("isbn");

String sshpwd= request.getParameter("ssh_secret")==null?"no":request.getParameter("ssh_secret");

System.out.println(sshpwd);

System.out.println(isbn);

Map result = new HashMap();

String json= Gson().toJson(result);

Writer out=response.getWriter();

out.write(DouBanBook.doPost("https://api.douban.com/v2/book/isbn/"+isbn,null,1)">));

out.flush();

}

void doPost(HttpServletRequest request,IOException {

TODO Auto-generated method stub

doGet(request,response);

}

}

同样,你也可以用Python,PHP等语言来实现中继访问这个功能。

无域名和云服务器

对于个人开发者来说,尤其是学生来说,又是是没有条件购买长时间的云服务器的,这个时候我们如果是开发小程序的话,可以用他们提供的空间。

使用微信小程序的云开发能力,Node.js 函数,用js 实现服务端的响应,访问非https API。

参照写法一(不建议,处理的返回数据必须为JSON才可以):

云函数调用方式访问API

const cloud = require('wx-server-sdk')

cloud.init(){

console.log(event)

console.log(context)return new Promise((resolve,reject) =>{var url = event.url;前端小程序传的data

var https = require('https');

https.get(url,function(res) {var size = 0;var chunks =[];

res.on('data',1)"> (chunk) {

size +=chunk.length;

chunks.push(chunk);

});

res.on('end',1)"> () {

var data =Buffer.concat(chunks,size).toString();

console.log(data)

resolve(JSON.parse(data))

});

}).on('error',(e) =>{

console.log(`url:${url} error: ${e.message}`);

});

})

}

参考写法二,需要导入http包,返回的数据在小程序端需要用JSON.parse(res.result) 转为JSON数据

这个api是根据isbn码访问并获得图书信息的接口

var request = require('request')

cloud.init()var isbn =event.isbn{

request.get('http://isbn.szmesoft.com/ISBN/Query?ISBN=' + isbn,(error,response,body) =>{if(error) {

reject()

}else{{

resolve(body)

}(e) {

reject()

}

}

})

})

}

参照写法三:要在云函数开始调用的部分添加参数,且只适合POST方式,把参数全部用&连接到URL上

qz

{

request({

url: event.URL,method:"POST",json::event.token

},},1)"> (error,body) {if (!error && response.statusCode == 200) {(e) {

reject()

}

}

})

})

}

不知道什么原因,云函数我感觉并不是很稳定,建议有条件的还是用自己的服务器来实现吧。

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

小程序怎样链接上服务器,微信小程序http连接访问解决方案相关推荐

  1. 小程序开发工具绑定服务器,微信小程序绑定到第三方平台流程

    微信小程序授权绑定到第三方开放平台的过程,官方文档 写的不太清晰,在这里梳理罗列一下. 1 服务器准备,开通开放平台 消息校验token:htqa**************** 消息加密Key:NC ...

  2. 小程序用别人的服务器,微信小程序可以用自己的服务器么

    可以. 操作步骤如下: 1.首先用小程序账号登陆微信公众平台.然后点击左下角的"设置",之后点击右侧上部 的"开发设置",进入开发设置页面. 2.在开发设置页面 ...

  3. 微信小程序表单数据提交服务器,微信小程序防走弯路之:提交表单获取表单数据...

    1.简历一个简单的表单,点击'提交'按钮时,提交表单内容 2. 以姓名框为例 .wxml #调用formSubmit函数                               提交 class为 ...

  4. 微信小程序传递数组给服务器,微信小程序页面间的数组如何传递

    // A页面 // 数组.对象都需要stringify var listData = JSON.stringify(that.data.listData) var taskArray = JSON.s ...

  5. 微信小程序表单数据提交服务器,微信小程序-form表单提交

    效果 image html代码 是否公开信息 手机号 密码 性别 男 女 提交 重置 {{warn ? warn : "是否公开信息:"+isPub+",手机号:&quo ...

  6. 微信开发上传视频到服务器,微信小程序中实现上传视频的开发代码

    微信小程序中实现上传视频的开发代码,视频,接口,上传,代码,服务器 微信小程序中实现上传视频的开发代码 易采站长站,站长之家为您整理了微信小程序中实现上传视频的开发代码的相关内容. 本篇文章给大家带来 ...

  7. 阿里云服务器上搭建微信小程序服务端环境。

    无论是搭建个人博客空间也好,微信小程序也罢,搭建环境必需的两点:云服务器.域名,下面一步步给搭建演示如果在一台阿里云服务器上搭建微信小程序服务端环境. 1.云服务器准备:可在阿里云购买ECS服务器   ...

  8. uni-app uni-file-picker文件上传实现拍摄从相册选择获取图片上传文档服务器(H5上传-微信小程序上传)

    前言 最近在使用uni-app写H5移动端,有一个从手机拍摄从相册选择获取图片上传到文档服务器功能. 查阅uni-app发现关于上传图片,uni-file-picker文件上传,uni.chooseI ...

  9. 微信小程序 访问ip服务器,微信小程序如何获取code?微信小程序如何获取用户ip?...

    微信小程序如何获取code?微信小程序如何获取用户ip?最近小编收到很多问题,其中一个就是下面小编为大家整理一下关于微信小程序如何获取code的步骤,希望这些方法能够帮助到大家. 首先,调用 wx.l ...

  10. 小程序源码:AI微信小程序源码下载人脸照片AI转换动漫照片全新源码安装简单无需服务器域名-多玩法安装简单

    这是一款AI人脸转动漫的一款微信小程序源码 该款小程序源码无需服务器和域名 搭建安装简单 有多种风格转换模式可自选 安装教程: 首先解压源码然后把源码上传到微信开发者工具打开 另外设置一个合法域名 合 ...

最新文章

  1. 编程之美2.15 二维数组最大子数组的和(数组下标从(1,1)开始)
  2. .net生成随机字符串
  3. Linux chmod
  4. Swagger原理解析
  5. 手工制作机器人用彩泥_灌浆壶和手工壶的区别,你知道吗?
  6. amazon linux ami root 密码,Amazon Linux AMI 2015.09 (HVM)平台搭建lamp
  7. 服务器价格指导 7月四路机架产品选购
  8. 泛函分析(空间部分)知识点总结
  9. 英译中练习:准译员如何“假装”自己很专业?丨打死个翻译官2.3
  10. jQuery Fancybox插件介绍
  11. 小龙女,杨过跳崖真相
  12. Java里面for循环的几种用法
  13. 【示波器专题】示波器探头的负载效应
  14. PReLU与ReLU
  15. MapReduce编程规范及实践(流量统计)
  16. 树莓派4b移植4G USB驱动Quectel EC200T以及ppp拨号
  17. eclipse常用插件地址
  18. 灰色关联分析——供应商选择
  19. 【学习总结】激光雷达与相机外参标定:原理与代码1
  20. 【码蹄集新手村 600 题】判断输入的俩个正整数是否为蛮生质数(蛮生素数)

热门文章

  1. 出现Please make sure you have the correct access rights and the repository exists.问题解决
  2. 最新2016年春运抢票12306买下铺攻略
  3. 研发项目wbs分解简单案例_2013项目管理案例分析:工作分解结构(WBS)(精选五篇)...
  4. 机器人操作系统 ROS 大全
  5. IOS测试版全版本固件下载集合
  6. rs232读取智能电表_预付费电表高性价比型号推荐 预付费抄表系统免费安装
  7. 编译libpng + zlib
  8. 最小配筋率、配筋率、超筋率定义与分析
  9. MODIS数据下载——订单模式下载tif影像
  10. Hack with Lenna | PIX与诗歌、自动驾驶和图像识别