最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

微信小程序http連接訪問(wèn)解決方案的示例

 更新時(shí)間:2018年11月05日 10:50:54   作者:Kindear_chen  
這篇文章主要介紹了微信小程序http連接訪問(wèn)解決方案的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

HTTP + 加密 + 認(rèn)證 + 完整性保護(hù) = HTTPS,小程序考慮到信息安全的問(wèn)題,選用了更為穩(wěn)定安全的https 來(lái)進(jìn)行信息傳遞。

HTTPS協(xié)議的主要作用可以分為兩種:一種是建立一個(gè)信息安全通道,來(lái)保證數(shù)據(jù)傳輸?shù)陌踩涣硪环N就是確認(rèn)網(wǎng)站的真實(shí)性。

這就導(dǎo)致了許多好用的http  API無(wú)法在小程序中被調(diào)用。

但是也有解決方案。

1.中繼訪問(wèn)

中繼訪問(wèn)有兩種方式,一種需要自己擁有一個(gè)云服務(wù)和域名。

擁有域名和云服務(wù)器

域名完成備案之后下載證書(shū)

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

騰訊云上免費(fèi)部署HTTPS

再講域名解析到你的云服務(wù)器的IP。

這樣子你的域名就是https的了,小程序可以訪問(wèn)你的服務(wù)器了,現(xiàn)在就開(kāi)始在云服務(wù)上實(shí)現(xiàn)訪問(wèn)http API 服務(wù)

實(shí)際上只需要面向小程序和API Server 做一個(gè)雙面響應(yīng)即可。

實(shí)現(xiàn)這種功能,顯而易見(jiàn),在服務(wù)器上部署一個(gè)Web項(xiàng)目是最簡(jiǎn)單的實(shí)現(xiàn)方式:

我們以訪問(wèn)豆瓣圖書(shū)API 為例:https://api.douban.com/v2/book/isbn/

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

Java代碼:

這個(gè)是 通用代碼 ,無(wú)論是訪問(wèn)什么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 {

  //豆瓣接口實(shí)現(xiàn)

  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);

      // 打開(kāi)和URL之間的連接,根據(jù)url

      URLConnection conn = realUrl.openConnection();

      // 設(shè)置通用的請(qǐng)求屬性

      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);

      // 發(fā)送POST請(qǐng)求必須設(shè)置如下兩行

      conn.setDoOutput(true);

      conn.setDoInput(true);

   

      // 設(shè)置請(qǐng)求超時(shí)時(shí)間和讀取超時(shí)時(shí)間

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

      conn.setReadTimeout(readTimeout == null ? 180 : readTimeout);

   

      // 獲取URLConnection對(duì)象對(duì)應(yīng)的輸出流,設(shè)置utf-8編碼

      out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(), "utf-8"));

      // 發(fā)送請(qǐng)求參數(shù)

      out.print(params);

      // flush輸出流的緩沖

      out.flush();

      // 定義BufferedReader輸入流來(lái)讀取URL的響應(yīng),設(shè)置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塊來(lái)關(guān)閉輸出流、輸入流

    finally

    {

      try

      {

        if (out != null)

        {

          out.close();

        }

        if (in != null)

        {

          in.close();

        }

      }

      catch (IOException ex)

      {

        ex.printStackTrace();

      }

    }

    return result;

  }

}

根據(jù)訪問(wèn)不同的API,只需要修改Servlet的寫(xiě)法就可以:

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等語(yǔ)言來(lái)實(shí)現(xiàn)中繼訪問(wèn)這個(gè)功能。

無(wú)域名和云服務(wù)器

對(duì)于個(gè)人開(kāi)發(fā)者來(lái)說(shuō),尤其是學(xué)生來(lái)說(shuō),又是是沒(méi)有條件購(gòu)買長(zhǎng)時(shí)間的云服務(wù)器的,這個(gè)時(shí)候我們?nèi)绻情_(kāi)發(fā)小程序的話,可以用他們提供的空間。

使用微信小程序的云開(kāi)發(fā)能力,Node.js 函數(shù),用js 實(shí)現(xiàn)服務(wù)端的響應(yīng),訪問(wèn)非https API。

參照寫(xiě)法一:

云函數(shù)調(diào)用方式訪問(wèn)API

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

 

cloud.init()

 

// 云函數(shù)入口函數(shù)

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}`);

  });

 })

}

不知道什么原因,云函數(shù)我感覺(jué)并不是很穩(wěn)定,建議有條件的還是用自己的服務(wù)器來(lái)實(shí)現(xiàn)吧。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

道孚县| 沅陵县| 富源县| 丰原市| 四会市| 循化| 方正县| 新乡市| 方山县| 宁陵县| 红原县| 吴忠市| 宁南县| 新宁县| 大港区| 灵璧县| 稻城县| 卫辉市| 西乌珠穆沁旗| 安西县| 岱山县| 乐昌市| 襄城县| 卫辉市| 金堂县| 洞口县| 岳普湖县| 山阴县| 那曲县| 肥乡县| 平利县| 本溪| 安泽县| 清新县| 特克斯县| 周至县| 南雄市| 广宗县| 虞城县| 洛浦县| 五家渠市|