
net.ymate.platform.commons.http.HttpRequestBuilder Maven / Gradle / Ivy
The newest version!
/*
* Copyright 2007-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.ymate.platform.commons.http;
import net.ymate.platform.commons.http.impl.DefaultHttpRequest;
import org.apache.commons.lang.NullArgumentException;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.Header;
import org.apache.http.NameValuePair;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.content.ContentBody;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.InputStreamBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.message.BasicHeader;
import org.apache.http.message.BasicNameValuePair;
import java.io.File;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.util.*;
/**
* @author 刘镇 ([email protected]) on 2020/04/12 13:56
* @since 2.1.0
*/
public final class HttpRequestBuilder {
public static HttpRequestBuilder create(String url) {
return new HttpRequestBuilder(url);
}
private final String url;
private final List headers = new ArrayList<>();
private final List params = new ArrayList<>();
private final Map contents = new HashMap<>();
private Object content;
private Charset charset;
private Charset responseCharset;
private ContentType contentType;
private boolean download;
private IFileHandler fileHandler;
private int connectionTimeout = -1;
private int requestTimeout = -1;
private int socketTimeout = -1;
private SSLConnectionSocketFactory socketFactory;
private IHttpClientConfigurable configurable;
public HttpRequestBuilder(String url) {
if (StringUtils.isBlank(url)) {
throw new NullArgumentException("url");
}
this.url = url;
}
public HttpRequestBuilder addHeader(String name, String value) {
return addHeader(new BasicHeader(name, value));
}
public HttpRequestBuilder addHeader(Header header) {
if (header != null) {
headers.add(header);
}
return this;
}
public HttpRequestBuilder addHeaders(Header[] headers) {
if (headers != null) {
Arrays.stream(headers).forEach(this::addHeader);
}
return this;
}
public HttpRequestBuilder addHeaders(Map headers) {
if (headers != null && !headers.isEmpty()) {
headers.forEach(this::addHeader);
}
return this;
}
public HttpRequestBuilder addParam(String name, String value) {
params.add(new BasicNameValuePair(name, value));
return this;
}
public HttpRequestBuilder addParam(NameValuePair param) {
if (param != null) {
params.add(param);
}
return this;
}
public HttpRequestBuilder addParams(Map params) {
if (params != null && !params.isEmpty()) {
params.forEach(this::addParam);
}
return this;
}
public HttpRequestBuilder addBody(String fieldName, ContentBody contentBody) {
if (StringUtils.isBlank(fieldName)) {
throw new NullArgumentException("fieldName");
}
if (contentBody != null) {
contents.put(fieldName, contentBody);
}
return this;
}
public HttpRequestBuilder addContent(String fieldName, File file) {
if (file != null) {
addBody(fieldName, new FileBody(file));
}
return this;
}
public HttpRequestBuilder addContent(String fieldName, InputStream inputStream, String fileName) {
if (inputStream != null) {
addBody(fieldName, new InputStreamBody(inputStream, fileName));
}
return this;
}
public HttpRequestBuilder addContent(String fieldName, InputStream inputStream, ContentType contentType, String fileName) {
if (inputStream != null) {
addBody(fieldName, new InputStreamBody(inputStream, contentType, fileName));
}
return this;
}
public HttpRequestBuilder addContent(String fieldName, String body, ContentType contentType) {
if (body != null && contentType != null) {
addBody(fieldName, new StringBody(body, contentType));
}
return this;
}
public HttpRequestBuilder content(String content) {
this.content = content;
return this;
}
public HttpRequestBuilder content(byte[] content) {
this.content = content;
return this;
}
public HttpRequestBuilder content(InputStream content) {
this.content = content;
return this;
}
public HttpRequestBuilder content(File content) {
this.content = content;
return this;
}
public HttpRequestBuilder charset(Charset charset) {
this.charset = charset;
return this;
}
public HttpRequestBuilder charset(String charset) {
this.charset = Charset.forName(charset);
return this;
}
public HttpRequestBuilder responseCharset(Charset responseCharset) {
this.responseCharset = responseCharset;
return this;
}
public HttpRequestBuilder responseCharset(String responseCharset) {
this.responseCharset = Charset.forName(responseCharset);
return this;
}
public HttpRequestBuilder contentType(String mimeType, String charset) {
if (StringUtils.isNotBlank(mimeType)) {
this.contentType = ContentType.create(mimeType, StringUtils.defaultIfBlank(charset, this.charset != null ? this.charset.name() : null));
}
return this;
}
public HttpRequestBuilder contentType(ContentType contentType) {
this.contentType = contentType;
return this;
}
public HttpRequestBuilder download(boolean download) {
this.download = download;
return this;
}
public HttpRequestBuilder download(IFileHandler fileHandler) {
this.download = true;
this.fileHandler = fileHandler;
return this;
}
public HttpRequestBuilder connectionTimeout(int connectionTimeout) {
if (connectionTimeout > -1) {
this.connectionTimeout = connectionTimeout;
}
return this;
}
public HttpRequestBuilder requestTimeout(int requestTimeout) {
if (requestTimeout > -1) {
this.requestTimeout = requestTimeout;
}
return this;
}
public HttpRequestBuilder socketTimeout(int socketTimeout) {
if (socketTimeout > -1) {
this.socketTimeout = socketTimeout;
}
return this;
}
public HttpRequestBuilder socketFactory(SSLConnectionSocketFactory socketFactory) {
this.socketFactory = socketFactory;
return this;
}
public HttpRequestBuilder configurable(IHttpClientConfigurable httpClientConfigurable) {
this.configurable = httpClientConfigurable;
return this;
}
public String getUrl() {
return url;
}
public List getHeaders() {
return headers;
}
public List getParams() {
return params;
}
public Map getContents() {
return contents;
}
public Object getContent() {
return content;
}
public Charset getCharset() {
return charset;
}
public Charset getResponseCharset() {
return responseCharset;
}
public ContentType getContentType() {
return contentType;
}
public boolean isDownload() {
return download;
}
public IFileHandler getFileHandler() {
return fileHandler;
}
public int getConnectionTimeout() {
return connectionTimeout;
}
public int getRequestTimeout() {
return requestTimeout;
}
public int getSocketTimeout() {
return socketTimeout;
}
public SSLConnectionSocketFactory getSocketFactory() {
return socketFactory;
}
public IHttpClientConfigurable getConfigurable() {
return configurable;
}
public IHttpRequest build() {
return new DefaultHttpRequest(this);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy