linux httppost 请求接口参数被截断_记一次小程序图片安全接口和CountDownLatch的使用...
背景:
我們的小程序由于之前沒接入微信官方提供的信息安全接口,導致被警告,下掉了被搜索的權限(手動狗頭)。然后這兩天就花時間在接入上面了,遇到的坑還是挺多的。
微信原開發文檔地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/sec-check/security.imgSecCheck.html主要是有兩種東西:1、文本消息審核:msgSecCheck2、圖片審核:imgSecCheck其實還有一個:mediaCheckAsync,這個是異步審核的,文檔下面說:異步檢測結果在 30 分鐘內會推送到你的消息接收服務器。我們的小程序是一個社區,需要同步檢測,所以這個就pass了(狗頭)。
開發過程:
0、這兩個接口的統一返回結果:
返回結果
所以就返回的字符串判斷為0就完事了。
1、獲取token
這兩個接口都需要獲取到access_token,獲取方式就這個東西來:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/access-token/auth.getAccessToken.html
2-1、文本審核
文本審核的就比較粗暴了,POST請求到:https://api.weixin.qq.com/wxa/msg_sec_check?access_token=ACCESS_TOKENbody里面傳遞一個{"content":"hello world"}看返回結果就完事了。
2-2、圖片審核
那就是比較麻煩的圖片審核接口了。開發文檔里面可以看到
圖片審核接口請求參數
他是需要一個FormData的參數,這個就比較惡心了,不能直接把圖片的url傳過去,需要設置一個類似file的文件。這個后面要處理也不是特別難,我們用的是HttpClient,先接收url參數,再使用HttpGet(HttpPost也行),返回url的response,接著他里面有一個獲取文件流的方法,簡單不設置參數的寫法:
HttpClient請求圖片url獲取流對象
然后需要將流轉化為file
都是一些最基本的,并沒有設置參數啥的
結果:接入微信安全信息審核的接口,就只要實現上面,分別就可以實現文本、圖片的審核了。但是現在就存在一個問題,圖片的審核接口都是只能一張一張審核的,還需要解析成流再下載成文件,后面測試的時候發現,解析出這樣一個文件并調用接口返回參數的步驟差不多需要2秒鐘的時間。我們的東西像是B博一樣,一次性可以發布多張圖片的,這樣一張一張審核就會花費不少的時間,用戶要等待響應,體驗就極差。但是不審核又不行,不然他們不給你程序過呀。
在這個基礎上面,就想出能不能有增加用戶體驗的效果的東西來實現這種功能,后來就想到了用多線程來實現,一次性弄幾個線程來分別執行一張圖片的審核。但是單單聲明出多個子線程,后面要怎么匯聚起來得到結果呢?后來又想到,去年剛畢業找工作的時候,發了瘋地看一下面試題,特別是一些并發之類的東西,突然就想起來了JUC下面的工具包有個CountDownLatch這玩意。
通俗一點對它的解釋就是:聲明出某個數值比如為10,共有10個子線程,每一個子線程執行完之后,10就減1,10個子線程執行完之后,10就變成0,這個時候主線程就等待子線程都執行完,才執行后面的流程。所以,我們有幾張圖片,就在線程池里面聲明出幾個子線程,子線程中沒有報錯的話,就CountDownLatch - 1,主線程最后判斷等于0的話,才能執行下一步,如果不為0,說明其中有子線程調用微信審核接口出錯,有違規圖片。
代碼截圖
HttpClient的配置和線程池、CountDownLatch的聲明
循環聲明出子線程
創建臨時文件
調用審核接口
Latch邏輯
主線程等待
(狗頭)上面都沒有怎么配置一些header、超時多久,還有一些亂七八糟的東西,為了早點接完這個接口提交申訴也只能這樣了,后面有時間的話再看一下能不能優化了。
PS:小程序安全審核接口是真的……誰用誰知道系列(狗頭)
總結
以上是生活随笔為你收集整理的linux httppost 请求接口参数被截断_记一次小程序图片安全接口和CountDownLatch的使用...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何给文字添加蓝色阴影边框
- 下一篇: type c和安卓接口区别