code: public QiniuBlockResponseData createBlockInQiniu(int blockSize, int firstChunkSize,
                                                     final byte[] firstChunkData, int retry) {
      try {
  
        String endPoint = String.format(QINIU_CREATE_BLOCK_EP, this.uploadUrl, blockSize);
        Request.Builder builder = new Request.Builder();
        builder.url(endPoint);
        builder.addHeader(HEAD_CONTENT_TYPE, DEFAULT_CONTENT_TYPE);
        builder.addHeader(HEAD_CONTENT_LENGTH, String.valueOf(firstChunkSize));
        builder.addHeader(HEAD_AUTHORIZATION, "UpToken " + this.uploadToken);
  
        LOGGER.d("createBlockInQiniu with uploadUrl: " + endPoint);
        RequestBody requestBody = RequestBody.create(MediaType.parse(DEFAULT_CONTENT_TYPE), firstChunkData, 0, firstChunkSize);
        builder = builder.post(requestBody);
  
        Response response = this.client.newCall(builder.build()).execute();
        return parseQiniuResponse(response, QiniuBlockResponseData.class);
      } catch (Exception e) {
        if (retry-- > 0) {
          return createBlockInQiniu(blockSize, firstChunkSize, firstChunkData, retry);
        } else {
          LOGGER.w(e);
        }
      }
      return null;
    }
docs: REST API:
  - POST /mkblk/<blockSize> HTTP/1.1
  - Host:           upload.qiniu.com
  - Content-Type:   application/octet-stream
  - Content-Length: <firstChunkSize>
  - Authorization:  UpToken <UploadToken>
  - <firstChunkBinary>
  
  - Response
  {
  "ctx":          "<Ctx           string>",
  "checksum":     "<Checksum      string>",
  "crc32":         <Crc32         int64>,
  "offset":        <Offset        int64>,
  "host":         "<UpHost        string>"
  }
  @param blockSize
  @param firstChunkSize
  @param firstChunkData
  @param retry
  @return