![JAR search and dependency download from the Maven repository](/logo.png)
com.mzlion.easyokhttp.HttpClient Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of easy-okhttp Show documentation
Show all versions of easy-okhttp Show documentation
easy-okhttp是对okhttp3上层封装的网络框架,支持文件上传和下载表单提交(文件和一个参数对应多值),
链式调用,并且默认整合Gson,对返回结果多种转换,同时还支持HTTPS单向认证和双向认证等特性。
/*
* Copyright (C) 2016 mzlion([email protected]).
*
* 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 com.mzlion.easyokhttp;
import com.mzlion.core.lang.ArrayUtils;
import com.mzlion.core.lang.Assert;
import com.mzlion.core.lang.StringUtils;
import com.mzlion.core.utils.PlaceholderPropertyResolver;
import com.mzlion.core.utils.PropertyResolver;
import com.mzlion.easyokhttp.cookie.DefaultCookieJar;
import com.mzlion.easyokhttp.cookie.MemoryCookieStore;
import com.mzlion.easyokhttp.request.*;
import com.mzlion.easyokhttp.utils.CustomTrust;
import okhttp3.OkHttpClient;
import okio.Buffer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLSession;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
/**
*
* 2016-05-12 Create class.
*
*
* @author mzlion
*/
public enum HttpClient {
INSTANCE {};
//logger
private static final Logger LOGGER = LoggerFactory.getLogger(HttpClient.class);
/* Okhttp构造器 */
private OkHttpClient.Builder builder;
/* 默认的Header存储 */
private Map defaultHeaders;
/* default constructor */
HttpClient() {
//default init
builder = new OkHttpClient.Builder()
//设置cookie自动管理
.cookieJar(new DefaultCookieJar(new MemoryCookieStore()))
//设置默认https验证
.hostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
//读取默认配置文件
PropertyResolver propertyResolver = new PlaceholderPropertyResolver.Builder()
.path("classpath:easy-okhttp.properties").build();
builder
//连接超时时间
.connectTimeout(propertyResolver.getProperty("okhttp.connectionTimeout", Long.class), TimeUnit.MILLISECONDS)
//读取超时时间
.readTimeout(propertyResolver.getProperty("okhttp.readTimeout", Long.class), TimeUnit.MILLISECONDS);
defaultHeaders = new ConcurrentHashMap<>(10);
}
/**
* 设置连接超时时间
*
* @param connectionTimeout 超时时间,单位毫秒
* @return {@linkplain HttpClient}
*/
public HttpClient setConnectionTimeout(int connectionTimeout) {
if (connectionTimeout <= 0) {
LOGGER.error(" ===> Connect timeout must not be less than 0.");
return this;
}
this.builder.connectTimeout(connectionTimeout, TimeUnit.MILLISECONDS);
return this;
}
/**
* 设置流读取时间
*
* @param readTimeout 读取超时时间,单位毫秒
* @return {@linkplain HttpClient}
*/
public HttpClient setReadTimeout(int readTimeout) {
if (readTimeout <= 0) {
LOGGER.error(" ===> Read timeout must not be less than 0.");
return this;
}
this.builder.readTimeout(readTimeout, TimeUnit.MILLISECONDS);
return this;
}
public HttpClient setCertificates(String... certificateContents) {
Assert.notEmpty(certificateContents, "The certificate content must not be null.");
int length = certificateContents.length;
InputStream[] certificateIns = new InputStream[length];
for (int i = 0; i < length; i++) {
certificateIns[i] = new Buffer().writeUtf8(certificateContents[i]).inputStream();
}
return this.setCertificates(certificateIns);
}
/**
* 加载自定义SSL证书
*
* @param certificates 证书输入流
* @return {@link HttpClient}
*/
public HttpClient setCertificates(InputStream... certificates) {
this.builder.sslSocketFactory(CustomTrust.sslSocketFactory(certificates));
return this;
}
/**
* 信任所有Https请求
*
* @return {@link HttpClient}
*/
public HttpClient setCertificates() {
return this.setCertificates((InputStream[]) null);
}
/**
* 载入自定义SSL文件
*
* @param certificateFiles SSL文件
* @return {@linkplain HttpClient}
*/
public HttpClient setCertificates(File... certificateFiles) {
Assert.notEmpty(certificateFiles, "Certificate files must not be null.");
InputStream[] certificateIns = null;
if (ArrayUtils.isNotEmpty(certificateFiles)) {
int length = certificateFiles.length;
certificateIns = new InputStream[length];
for (int i = 0; i < length; i++) {
try {
certificateIns[i] = new FileInputStream(certificateFiles[i]);
} catch (FileNotFoundException e) {
throw new HttpClientConfigException(e);
}
}
}
return this.setCertificates(certificateIns);
}
/**
* 设置默认的Http Header
*
* @param name Header名称
* @param value Header值
* @return {@linkplain HttpClient}
*/
public HttpClient setDefaultHeader(String name, String value) {
if (StringUtils.hasText(name) && StringUtils.hasLength(value)) {
this.defaultHeaders.put(name, value);
}
return this;
}
/**
* 获取默认的Http Header列表
*
* @return Header键值对列表
*/
public Map getDefaultHeaders() {
return defaultHeaders;
}
//========================构建OkHttpClient========================
/**
* 返回{@linkplain OkHttpClient}对象
*
* @return {@link OkHttpClient}
*/
public OkHttpClient getOkHttpClient() {
return builder.build();
}
//=====================request======================
/**
* Get请求
*
* @param url 请求地址
* @return {@link GetRequest}
*/
public static GetRequest get(String url) {
return new GetRequest(url);
}
/**
* X-WWW-FORM-URLENCODED表单提交
*
* @param url 提交地址
* @return {@link CommonPostRequest}
*/
public static CommonPostRequest post(String url) {
return new CommonPostRequest(url);
}
/**
* FORM-DATA表单提交
*
* @param url 提交地址
* @return {@link FormDataPostRequest}
*/
public static FormDataPostRequest formDataPost(String url) {
return new FormDataPostRequest(url);
}
/**
* 向请求体中传入二进制流
*
* @param url 请求地址
* @return {@linkplain BinaryBodyPostRequest}
*/
public static BinaryBodyPostRequest binaryBody(String url) {
return new BinaryBodyPostRequest(url);
}
/**
* 文本POST请求体
*
* @param url 请求地址
* @return {@link TextBodyRequest}
*/
public static TextBodyRequest textBody(String url) {
return new TextBodyRequest(url);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy