0

使用IDEA的 HTTP request发请二进制数据流访问请求

 2 years ago
source link: https://segmentfault.com/a/1190000040811649
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

再与硬件的对接过程中,我们希望能够通过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();
    }
  }
}

代码运行完毕后,将生成的数据文件复制到自己想要的位置即可。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK