您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關(guān)怎么在微信小程序中利用http連接訪問(wèn),小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。
1.中繼訪問(wèn)
中繼訪問(wèn)有兩種方式,一種需要自己擁有一個(gè)云服務(wù)和域名。
擁有域名和云服務(wù)器
域名完成備案之后下載證書
https指引教程如下------>
騰訊云上免費(fèi)部署HTTPS
再講域名解析到你的云服務(wù)器的IP。
這樣子你的域名就是https的了,小程序可以訪問(wèn)你的服務(wù)器了,現(xiàn)在就開始在云服務(wù)上實(shí)現(xiàn)訪問(wèn)http API 服務(wù)
實(shí)際上只需要面向小程序和API Server 做一個(gè)雙面響應(yīng)即可。
實(shí)現(xiàn)這種功能,顯而易見,在服務(wù)器上部署一個(gè)Web項(xiàng)目是最簡(jiǎn)單的實(shí)現(xiàn)方式:
我們以訪問(wèn)豆瓣圖書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); // 打開和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的寫法就可以:
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è)人開發(fā)者來(lái)說(shuō),尤其是學(xué)生來(lái)說(shuō),又是是沒有條件購(gòu)買長(zhǎng)時(shí)間的云服務(wù)器的,這個(gè)時(shí)候我們?nèi)绻情_發(fā)小程序的話,可以用他們提供的空間。
使用微信小程序的云開發(fā)能力,Node.js 函數(shù),用js 實(shí)現(xiàn)服務(wù)端的響應(yīng),訪問(wèn)非https API。
參照寫法一:
云函數(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}`); }); }) }
以上就是怎么在微信小程序中利用http連接訪問(wèn),小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。