使用IDEA的 HTTP request發請二進位制資料流訪問請求

myskies 發表於 2021-10-15

再與硬體的對接過程中,我們希望能夠通過IDEA來模擬一些與硬體通訊的二進位制資料,比如:

    byte[] input = new byte[]{
        // 型別編號
        0x00,
        // 中繼器編號
        (byte) 0xff, (byte) 0xff,
        // 監視器類別0
        0x12,
        // 監視器編號
        (byte) 0xab, (byte) 0xff, (byte) 0xcb
    };

IDEA自帶的的HTTP Request能夠快速的滿足我們各樣的資料請求,但在其官方文件中卻沒有傳送傳送二進位制資料流的直接示例。

若要傳送一些二進位制資料流,則可以按以下步驟操作:

建立二進位制文件

我們可以新建一個文件,名字及副檔名隨便起,比如我們將其命名為0x01.data。該文件儲存的資訊則將是我們傳送http請求的二進位制資料流。

安裝外掛

若想使用0x01.data檔案符合我們的測試要求,則需要一款二進位制的編輯器來編輯器。IDEA中友好的出現了BinEd外掛

找到外掛管理,並在市場選項中以bined關鍵字進行搜尋後,安裝:

image.png

外掛安裝成功後,需要重新啟動IDEA。

編輯資料檔案

雙擊在前面我們建立的檔案0x01.data,並任何選擇一種開啟方式,比如我們選擇將其做為文字開啟,然後在右側的檔案內容區域點選右鍵,並選擇最後一個選項 Open As Binary:
image.png

此時就可以直接在這裡編輯二進位制檔案了。
image.png

建立請求

最後便可以使用HTTP Request來傳送以0x01.data檔案為基礎的二進位制資料了。
我們在0x01.data檔案的同級位置上新建一個Http Request,並加入以下程式碼:

POST http://localhost:8081/yourApi
Content-Type: application/octet-stream

< ./0x01.data

此時執行請請求,便可以成功地向後臺傳送二進位制資料流了。

其它

資料少的時候我們還可以手動敲一下,但如果資料量比較大,那麼我們肯定更期待使用一些JAVA的語法來構造(比如我們希望生成1M且有規則的二進位制資料流)。此時則需要一些程式碼來輔助了,示例程式碼如下:

package club.yunzhi.switchgear.httpRequest;

import club.yunzhi.switchgear.input.MonitorInput0x01Test;
import org.apache.commons.lang3.ArrayUtils;
import org.junit.jupiter.api.Test;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class Monitor0x01 {
  @Test
  void saveToDisk() {
    // 使用程式碼來構建測試的二進位制陣列
    byte[] category = new byte[]{
        (byte) 0x00,
        (byte) 0x00, (byte) 0x01,
        (byte) 0x01
    };
    byte[] bytes = ArrayUtils.addAll(category, MonitorInput0x01Test.input);

    // 將二進位制寫入到0x01.data中
    File outputFile = new File("./0x01.data");
    try {
      FileOutputStream fileOutputStream = new FileOutputStream(outputFile);
      fileOutputStream.write(bytes);
      fileOutputStream.flush();
      fileOutputStream.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

程式碼執行完畢後,將生成的資料檔案複製到自己想要的位置即可。