docs: public static String createTimestampAntiLeechUrl(
              String host, String fileName, final StringMap queryStringMap, String encryptKey, long deadline)
              throws QiniuException {
          URL urlObj = null;
          try {
              String urlToSign = null;
              if (queryStringMap != null && queryStringMap.size() > 0) {
                  List<String> queryStrings = new ArrayList<String>();
                  for (Map.Entry<String, Object> entry : queryStringMap.map().entrySet()) {
                      StringBuilder queryStringBuilder = new StringBuilder();
                      queryStringBuilder.append(URLEncoder.encode(entry.getKey(), "utf-8"));
                      queryStringBuilder.append("=");
                      queryStringBuilder.append(URLEncoder.encode(entry.getValue().toString(), "utf-8"));
                      queryStrings.add(queryStringBuilder.toString());
                  }
                  urlToSign = String.format("%s/%s?%s", host, fileName, StringUtils.join(queryStrings, "&"));
              } else {
                  urlToSign = String.format("%s/%s", host, fileName);
              }
  
              urlObj = new URL(urlToSign);
          } catch (Exception e) {
              throw new QiniuException(e, "timestamp anti leech failed");
          }
          return createTimestampAntiLeechUrl(urlObj, encryptKey, deadline);
      }