業務描述:
模擬終端(智能家居)發送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,這也是默認值)