All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.dreampie.client.HttpClientRequest Maven / Gradle / Ivy

The newest version!
package cn.dreampie.client;

import cn.dreampie.common.http.ContentType;
import cn.dreampie.common.http.Encoding;
import cn.dreampie.common.util.Checker;
import cn.dreampie.common.util.Maper;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import static cn.dreampie.common.util.Checker.checkNotNull;

public class HttpClientRequest {
  private String restPath;
  private String encoding = Encoding.UTF_8.name();
  private Map params = Maper.of();
  private String jsonParam;
  private Map headers = Maper.of();
  private int connectTimeOut = 10000;
  private int readTimeOut = 10000;
  private boolean overwrite = false;
  private String downloadFile;
  private Map uploadFiles = Maper.of();
  private String contentType = ContentType.FORM.value() + ";charset=" + encoding;
  private String userAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.146 Safari/537.36";

  public HttpClientRequest() {
    this("");
  }

  public HttpClientRequest(String restPath) {
    this(restPath, Encoding.UTF_8.name());
  }

  public HttpClientRequest(String restPath, String encoding) {
    this(restPath, encoding, Maper.of());
  }

  public HttpClientRequest(String restPath, Map params) {
    this(restPath, null, params);
  }

  public HttpClientRequest(String restPath, String encoding, Map params) {
    this(restPath, encoding, params, Maper.of());
  }

  public HttpClientRequest(String restPath, String encoding, Map params, Map headers) {
    this.restPath = checkNotNull(restPath);
    if (encoding != null) {
      this.encoding = encoding;
      this.contentType = ContentType.FORM.value() + ";charset=" + encoding;
    }
    this.params = params;
    this.headers = headers;
  }

  public String getRestPath() {
    return this.restPath;
  }

  public String getEncodedRestPath() throws UnsupportedEncodingException {
    String url = this.restPath;
    String tmp;
    Matcher matcher = Pattern.compile("[^a-zA-Z0-9\\/\\?#&=\\+\\*\\$@!%\\.\\|\\(\\)\\^\\{\\}\\[\\]]").matcher(url);
    while (matcher.find()) {
      tmp = matcher.group();
      url = url.replaceAll(tmp, URLEncoder.encode(tmp, encoding));
    }
    return url;
  }

  public String getEncoding() {
    return this.encoding;
  }

  public HttpClientRequest setEncoding(String encoding) {
    this.encoding = encoding;
    return this;
  }

  public Map getParams() {
    return this.params;
  }

  public HttpClientRequest setParams(Map params) {
    this.params = params;
    return this;
  }

  public Map getHeaders() {
    return this.headers;
  }

  public HttpClientRequest setHeaders(Map headers) {
    this.headers = headers;
    return this;
  }

  public HttpClientRequest addParam(String name, String value) {
    this.params.put(name, value);
    return this;
  }

  public String getContentType() {
    return contentType;
  }

  public HttpClientRequest setContentType(String contentType) {
    this.contentType = contentType;
    return this;
  }

  public String getUserAgent() {
    return userAgent;
  }

  public HttpClientRequest setUserAgent(String userAgent) {
    this.userAgent = userAgent;
    return this;
  }

  public String getJsonParam() {
    return jsonParam;
  }

  public HttpClientRequest setJsonParam(String jsonParam) {
    setContentType(ContentType.JSON.value() + ";charset=" + encoding);
    this.jsonParam = checkNotNull(jsonParam, "Json param could not be null.");
    return this;
  }

  public String getEncodedJsonParam() throws UnsupportedEncodingException {
    return URLEncoder.encode(jsonParam, encoding);
  }

  public HttpClientRequest addHeader(String key, String value) {
    this.headers.put(key, value);
    return this;
  }

  public int getConnectTimeOut() {
    return connectTimeOut;
  }

  public HttpClientRequest setConnectTimeOut(int connectTimeOut) {
    this.connectTimeOut = connectTimeOut;
    return this;
  }

  public int getReadTimeOut() {
    return readTimeOut;
  }

  public HttpClientRequest setReadTimeOut(int readTimeOut) {
    this.readTimeOut = readTimeOut;
    return this;
  }

  public boolean isOverwrite() {
    return overwrite;
  }

  public HttpClientRequest setDownloadFile(String downloadFile, boolean overwrite) {
    this.downloadFile = Checker.checkNotNull(downloadFile, "Download file could not be null.");
    this.overwrite = overwrite;
    return this;
  }

  public String getDownloadFile() {
    return downloadFile;
  }

  public HttpClientRequest setDownloadFile(String downloadFile) {
    setDownloadFile(downloadFile, false);
    return this;
  }

  public Map getUploadFiles() {
    return uploadFiles;
  }

  public HttpClientRequest setUploadFiles(Map uploadFiles) {
    this.uploadFiles = uploadFiles;
    setContentType(ContentType.MULTIPART.value() + ";charset=" + encoding);
    return this;
  }

  public HttpClientRequest addUploadFile(String name, String filepath) throws FileNotFoundException {
    this.uploadFiles.put(name, new HttpClientFile(filepath));
    setContentType(ContentType.MULTIPART.value() + ";charset=" + encoding);
    return this;
  }

  public HttpClientRequest addUploadFile(String name, File file) throws FileNotFoundException {
    this.uploadFiles.put(name, new HttpClientFile(file));
    setContentType(ContentType.MULTIPART.value() + ";charset=" + encoding);
    return this;
  }

  /**
   * @param name        param name
   * @param filename    file name
   * @param contentType
   * @param fileStream
   * @return
   */
  public HttpClientRequest addUploadFile(String name, String filename, String contentType, InputStream fileStream) {
    this.uploadFiles.put(name, new HttpClientFile(filename, contentType, fileStream));
    setContentType(ContentType.MULTIPART.value() + ";charset=" + encoding);
    return this;
  }

  public String getEncodedParams() throws UnsupportedEncodingException {
    String encodedParams = "";
    if (!this.params.isEmpty()) {
      Set paramKeys = this.params.keySet();
      boolean isFirstParam = true;
      String value = null;
      for (String key : paramKeys) {
        value = this.params.get(key);
        if (value == null) continue;
        if (isFirstParam) {
          encodedParams += key + "=" + URLEncoder.encode(value, this.getEncoding());
          isFirstParam = false;
        } else {
          encodedParams += "&" + key + "=" + URLEncoder.encode(value, this.getEncoding());
        }
      }
    }

    return encodedParams.trim();
  }

  public String getUnEncodedParams() {
    String params = "";
    if (!this.params.isEmpty()) {
      Set paramKeys = this.params.keySet();
      boolean isFirstParam = true;
      String value = null;
      for (String key : paramKeys) {
        value = this.params.get(key);
        if (value == null) continue;
        if (isFirstParam) {
          params += key + "=" + value;
          isFirstParam = false;
        } else {
          params += "&" + key + "=" + value;
        }
      }
    }

    return params.trim();
  }

  public String getEncodedUrl() throws UnsupportedEncodingException {
    String encodedUrl = this.getEncodedRestPath();
    if (!this.params.isEmpty()) {
      encodedUrl += "?";
      Set paramKeys = this.params.keySet();
      boolean isFirstParam = true;
      String value = null;
      for (String key : paramKeys) {
        value = this.params.get(key);
        if (value == null) continue;
        if (isFirstParam) {
          encodedUrl += key + "=" + URLEncoder.encode(value, this.getEncoding());
          isFirstParam = false;
        } else {
          encodedUrl += "&" + key + "=" + URLEncoder.encode(value, this.getEncoding());
        }
      }
    }
    return encodedUrl.trim();
  }

  public String getUnEncodedUrl() {
    String url = this.getRestPath();
    if (!this.params.isEmpty()) {
      url += "?";
      Set paramKeys = this.params.keySet();
      boolean isFirstParam = true;
      String value = null;
      for (String key : paramKeys) {
        value = this.params.get(key);
        if (value == null) continue;
        if (isFirstParam) {
          url += key + "=" + value;
          isFirstParam = false;
        } else {
          url += "&" + key + "=" + value;
        }
      }
    }
    return url.trim();
  }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy