麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 課堂 > 小程序 > 正文

微信小程序http連接訪問解決方案的示例

2020-03-21 16:01:24
字體:
來源:轉載
供稿:網友

HTTP + 加密 + 認證 + 完整性保護 = HTTPS,小程序考慮到信息安全的問題,選用了更為穩定安全的https 來進行信息傳遞。

HTTPS協議的主要作用可以分為兩種:一種是建立一個信息安全通道,來保證數據傳輸的安全;另一種就是確認網站的真實性。

這就導致了許多好用的http  API無法在小程序中被調用。

但是也有解決方案。

1.中繼訪問

微信小程序,http,訪問

中繼訪問有兩種方式,一種需要自己擁有一個云服務和域名。

擁有域名和云服務器

域名完成備案之后下載證書

再講域名解析到你的云服務器的IP。

這樣子你的域名就是https的了,小程序可以訪問你的服務器了,現在就開始在云服務上實現訪問http API 服務

實際上只需要面向小程序和API Server 做一個雙面響應即可。

微信小程序,http,訪問

實現這種功能,顯而易見,在服務器上部署一個Web項目是最簡單的實現方式:

我們以訪問豆瓣圖書API 為例:https://api.douban.com/v2/book/isbn/

豆瓣API雖然是https的,但是來自小程序的訪問是被禁止的。下面代碼同樣適用于http 連接

Java代碼:

這個是 通用代碼 ,無論是訪問什么API

package DataService; import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLConnection;import java.sql.ResultSet; import com.google.gson.Gson; /* * Author:陳浩東 * QQ:1025584691 */public class DouBanBook {  //豆瓣接口實現  public static String doPost(String url, String params, Integer connTimeout, Integer readTimeout, String contentType)  {    PrintWriter out = null;    BufferedReader in = null;    String result = "";    try    {      URL realUrl = new URL(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(true);         // 設置請求超時時間和讀取超時時間      conn.setConnectTimeout(connTimeout == null ? 180 : connTimeout);      conn.setReadTimeout(readTimeout == null ? 180 : 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(), "utf-8"));      String line;      while ((line = in.readLine()) != null)        result += line;    }    catch (Exception e)    {      e.printStackTrace();      result = null;    }    //使用finally塊來關閉輸出流、輸入流    finally    {      try      {        if (out != null)        {          out.close();        }        if (in != null)        {          in.close();        }      }      catch (IOException ex)      {        ex.printStackTrace();      }    }    return result;  }}

根據訪問不同的API,只需要修改Servlet的寫法就可以:

Servlet:

package Servlet; import java.io.IOException;import java.io.Writer;import java.util.HashMap;import java.util.Map; import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse; import com.google.gson.Gson; import DataService.DouBanBook; /** * Servlet implementation class doubanbook */@WebServlet("/doubanbook")public class doubanbook extends HttpServlet {  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, 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<String, Object> result = new HashMap<String, Object>();      String json = new Gson().toJson(result);      Writer out = response.getWriter();      out.write(DouBanBook.doPost("https://api.douban.com/v2/book/isbn/"+isbn, null, null, null, null));         out.flush();  }  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    // TODO Auto-generated method stub    doGet(request, response);  }}

同樣,你也可以用Python,php等語言來實現中繼訪問這個功能。

無域名和云服務器

對于個人開發者來說,尤其是學生來說,又是是沒有條件購買長時間的云服務器的,這個時候我們如果是開發小程序的話,可以用他們提供的空間。

使用微信小程序的云開發能力,Node.js 函數,用js 實現服務端的響應,訪問非https API。

參照寫法一:

云函數調用方式訪問API

const cloud = require('wx-server-sdk') cloud.init() // 云函數入口函數exports.main = async (event, context) => { 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', function (chunk) {    size += chunk.length;    chunks.push(chunk);   });   res.on('end', function () {    var data = Buffer.concat(chunks, size).toString();    console.log(data)    resolve(JSON.parse(data))   });  }).on('error', (e) => {   console.log(`url:${url} error: ${e.message}`);  }); })}

不知道什么原因,云函數我感覺并不是很穩定,建議有條件的還是用自己的服務器來實現吧。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 91久久国产综合久久91精品网站 | 久草在线观看福利视频 | h视频免费观看 | 久久国产精品区 | 在线成人精品视频 | 国产亚洲精品久久久闺蜜 | av成人一区二区 | 意大利av在线 | 操嫩草 | 看免费黄色一级片 | 一级黄色大片在线观看 | 久久成人午夜视频 | 久久亚洲精品国产一区 | 久久久久久亚洲综合影院红桃 | 欧美黄成人免费网站大全 | 日日草夜夜操 | 黄色片视频免费观看 | 国产羞羞视频在线观看 | 四季久久免费一区二区三区四区 | 国产精品欧美久久久久一区二区 | 国产精品视频海角社区88 | 日日噜噜噜噜久久久精品毛片 | 少妇的肉体的满足毛片 | 狠狠操操| 在线成人精品视频 | 香蕉视频99 | 热99在线视频 | 国产成人精品免费视频大全最热 | 视频一区 在线 | 国产精品久久久久无码av | 毛片a级毛片免费播放100 | 在线免费亚洲 | 色毛片 | 黄色三级网站 | 黄色99视频 | 亚洲成在人 | 日日摸夜夜添夜夜添牛牛 | 99国语露脸久久精品国产ktv | 日韩中文字幕三区 | 一区二区三区日韩电影 | 国产精品一品二区三区四区18 |