業務描述:
模擬終端(智能家居)發送HTTP POST請求,請求參數爲二進制流;而且,二進制流是加密後的數據,因此調試分兩步:
1、Java代碼生成加密後數據,並保存爲二進制流文件 (電腦上的圖片就是二進制流文件,只不過我們打開的時候,藉助於電腦軟件渲染爲圖片)
上代碼片段:
1 byte[] oneshotBytes = reqParms.getBytes(); 2 log.info("length----->"+oneshotBytes.length); 3 //FileWriter fw = new FileWriter(new File("/home/unisound/private_cloud_platform/rtc_demo/req_binary")); 4 //fw.write(new String(oneshotBytes,"utf-8")); 5 //fw.flush(); 6 //fw.close(); 7 OutputStream os = new FileOutputStream(new File("/home/unisound/private_cloud_platform/rtc_demo/req_binary")); 8 os.write(oneshotBytes); 9 os.flush(); 10 os.close();
代碼很簡單,就是把byte[]保存爲文件;
坑點:千萬不要把byte[] 轉換爲 String 然後把 String寫入文件;不然你會發現,原本214字節的文件變爲252字節或者更大!!!
原因很簡單,二進制流轉換爲字符串,這是編碼的過程,編碼就需要選擇字符集(這裏是UTF-8),字符集中字符長度和字節長度是不對等的,比如UTF-8中,一個漢字是3個字節,字母數組不編碼仍然是一個字節~!
簡單說,就是二進制數組byte[] 與 轉換成的String後的XXX.getBytes()的長度是不一樣的!!!!
2、PostMan發送請求
這個就簡單了,body中選擇binary(二進制流),選中第一步生成的二進制文件...
注意:
header中,不要設置ContentType(一定注意,不要設置ContentType,如果非要設置,請設置爲ContentType=text/plain,這也是默認值)