一道本av免费不卡播放_久久国产精品无码99_日韩精品亚洲精品第一页_日韩免费A级二区三区

全網(wǎng)整合營銷服務(wù)商

電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

免費(fèi)咨詢熱線:0595-85188098

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

HTTP + 加密 + 認(rèn)證 + 完整性保護(hù) = HTTPS,小程序考慮到信息安全的問題,選用了更為穩(wěn)定安全的https 來進(jìn)行信息傳遞。HTTPS協(xié)議的主要作用可以分為兩種:一種是建立一個信息安全通道,來保證數(shù)據(jù)傳輸?shù)陌踩?;另一種 ...

 
 
 

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

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

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

但是也有解決方案。

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

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

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

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

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

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

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

實際上只需要面向小程序和API Server 做一個雙面響應(yīng)即可。實現(xiàn)這種功能,顯而易見,在服務(wù)器上部署一個Web項目是最簡單的實現(xiàn)方式:

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

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

Java代碼:

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

 

						
  1. package DataService;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.io.InputStreamReader;
  7. import java.io.OutputStreamWriter;
  8. import java.io.PrintWriter;
  9. import java.net.HttpURLConnection;
  10. import java.net.URL;
  11. import java.net.URLConnection;
  12. import java.sql.ResultSet;
  13.  
  14. import com.google.gson.Gson;
  15.  
  16. /*
  17. * Author:陳浩東
  18. * QQ:1025584691
  19. */
  20. public class DouBanBook {
  21. //豆瓣接口實現(xiàn)
  22. public static String doPost(String url, String params, Integer connTimeout, Integer readTimeout, String contentType)
  23. {
  24. PrintWriter out = null;
  25. BufferedReader in = null;
  26. String result = "";
  27. try
  28. {
  29. URL realUrl = new URL(url);
  30. // 打開和URL之間的連接,根據(jù)url
  31. URLConnection conn = realUrl.openConnection();
  32. // 設(shè)置通用的請求屬性
  33. conn.setRequestProperty("accept", "*/*");
  34. conn.setRequestProperty("connection", "Keep-Alive");
  35. conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
  36. conn.setRequestProperty("Content-Type", contentType == null? "application/json" : contentType);
  37. // 發(fā)送POST請求必須設(shè)置如下兩行
  38. conn.setDoOutput(true);
  39. conn.setDoInput(true);
  40.  
  41. // 設(shè)置請求超時時間和讀取超時時間
  42. conn.setConnectTimeout(connTimeout == null ? 180 : connTimeout);
  43. conn.setReadTimeout(readTimeout == null ? 180 : readTimeout);
  44.  
  45. // 獲取URLConnection對象對應(yīng)的輸出流,設(shè)置utf-8編碼
  46. out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(), "utf-8"));
  47. // 發(fā)送請求參數(shù)
  48. out.print(params);
  49. // flush輸出流的緩沖
  50. out.flush();
  51. // 定義BufferedReader輸入流來讀取URL的響應(yīng),設(shè)置utf-8編碼
  52. in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
  53. String line;
  54. while ((line = in.readLine()) != null)
  55. result += line;
  56. }
  57. catch (Exception e)
  58. {
  59. e.printStackTrace();
  60. result = null;
  61. }
  62. //使用finally塊來關(guān)閉輸出流、輸入流
  63. finally
  64. {
  65. try
  66. {
  67. if (out != null)
  68. {
  69. out.close();
  70. }
  71. if (in != null)
  72. {
  73. in.close();
  74. }
  75. }
  76. catch (IOException ex)
  77. {
  78. ex.printStackTrace();
  79. }
  80. }
  81. return result;
  82. }
  83. }

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

Servlet:

 

						
  1. package Servlet;
  2.  
  3. import java.io.IOException;
  4. import java.io.Writer;
  5. import java.util.HashMap;
  6. import java.util.Map;
  7.  
  8. import javax.servlet.ServletException;
  9. import javax.servlet.annotation.WebServlet;
  10. import javax.servlet.http.HttpServlet;
  11. import javax.servlet.http.HttpServletRequest;
  12. import javax.servlet.http.HttpServletResponse;
  13.  
  14. import com.google.gson.Gson;
  15.  
  16. import DataService.DouBanBook;
  17.  
  18. /**
  19. * Servlet implementation class doubanbook
  20. */
  21. @WebServlet("/doubanbook")
  22. public class doubanbook extends HttpServlet {
  23. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  24. request.setCharacterEncoding("utf-8");
  25. response.setContentType("text/html;charset=utf-8");
  26. response.setHeader("Access-Control-Allow-Origin", "*");
  27. response.setHeader("Access-Control-Allow-Methods", "GET,POST");
  28. String isbn = request.getParameter("isbn")==null?"no":request.getParameter("isbn");
  29. String sshpwd = request.getParameter("ssh_secret")==null?"no":request.getParameter("ssh_secret");
  30. System.out.println(sshpwd);
  31. System.out.println(isbn);
  32. Map<String, Object> result = new HashMap<String, Object>();
  33. String json = new Gson().toJson(result);
  34. Writer out = response.getWriter();
  35. out.write(DouBanBook.doPost("https://api.douban.com/v2/book/isbn/"+isbn, null, null, null, null));
  36.  
  37. out.flush();
  38. }
  39. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  40. // TODO Auto-generated method stub
  41. doGet(request, response);
  42. }
  43. }

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

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

對于個人開發(fā)者來說,尤其是學(xué)生來說,又是是沒有條件購買長時間的云服務(wù)器的,這個時候我們?nèi)绻情_發(fā)小程序的話,可以用他們提供的空間。

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


您的項目需求

*請認(rèn)真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。