Skip to content

Commit 1f2e743

Browse files
authored
Merge pull request #1 from xkcoding/master
update fork merge
2 parents d8aabc5 + 6dd2a86 commit 1f2e743

File tree

13 files changed

+249
-82
lines changed

13 files changed

+249
-82
lines changed

.travis.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,7 @@ notifications:
1313
cache:
1414
directories:
1515
- '$HOME/.m2/repository'
16+
17+
branches:
18+
only:
19+
- master

README.md

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,24 @@
1515
<dependency>
1616
<groupId>com.xkcoding.http</groupId>
1717
<artifactId>simple-http</artifactId>
18-
<version>1.0.2</version>
18+
<version>1.0.1</version>
1919
</dependency>
2020
```
2121

2222
## 特点
2323

2424
- 默认会按照下面的优先级自行寻找底层实现,`java 11 HttpClient -> OkHttp3 -> apache HttpClient -> hutool-http`
2525
- 也可以自行实现 `com.xkcoding.http.support.Http` 接口,通过 `HttpUtil.setHttp(new MyHttpImpl())` 设置进来
26+
- 可以配置超时时间及代理
27+
28+
```java
29+
HttpConfig config = new HttpConfig();
30+
config.setProxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 10080)));
31+
config.setTimeout(15000);
32+
HttpUtil.setConfig(config);
33+
String s = HttpUtil.get("https://www.google.com");
34+
System.out.println("s = " + s);
35+
```
2636

2737
## TODO
2838

pom.xml

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>com.xkcoding.http</groupId>
88
<artifactId>simple-http</artifactId>
9-
<version>1.0.2</version>
9+
<version>1.0.2-SNAPSHOT</version>
1010

1111
<name>${project.artifactId}</name>
1212
<url>https://github.com/xkcoding/simple-http</url>
@@ -18,9 +18,9 @@
1818
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
1919
<maven.compiler.source>1.8</maven.compiler.source>
2020
<maven.compiler.target>1.8</maven.compiler.target>
21-
<okhttp3.version>4.2.2</okhttp3.version>
22-
<httpclient.version>4.5.10</httpclient.version>
23-
<hutool.version>5.1.0</hutool.version>
21+
<okhttp3.version>4.5.0</okhttp3.version>
22+
<httpclient.version>4.5.12</httpclient.version>
23+
<hutool.version>5.2.5</hutool.version>
2424
</properties>
2525

2626
<developers>
@@ -208,20 +208,17 @@
208208
<name>aliyun</name>
209209
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
210210
</repository>
211-
<!--xkcoding 私服-->
212-
<repository>
213-
<id>xkcoding-nexus</id>
214-
<name>xkcoding nexus</name>
215-
<url>https://nexus.xkcoding.com/repository/maven-public/</url>
216-
<releases>
217-
<enabled>true</enabled>
218-
</releases>
219-
<snapshots>
220-
<enabled>true</enabled>
221-
</snapshots>
222-
</repository>
223211
</repositories>
224212

213+
<pluginRepositories>
214+
<!--阿里云私服-->
215+
<pluginRepository>
216+
<id>aliyun</id>
217+
<name>aliyun</name>
218+
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
219+
</pluginRepository>
220+
</pluginRepositories>
221+
225222
<profiles>
226223
<profile>
227224
<id>release</id>

src/main/java/com/xkcoding/http/HttpUtil.java

Lines changed: 33 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,11 @@
1616

1717
package com.xkcoding.http;
1818

19+
import com.xkcoding.http.config.HttpConfig;
1920
import com.xkcoding.http.exception.SimpleHttpException;
21+
import com.xkcoding.http.support.AbstractHttp;
2022
import com.xkcoding.http.support.Http;
2123
import com.xkcoding.http.support.HttpHeader;
22-
import com.xkcoding.http.support.httpclient.HttpClientImpl;
23-
import com.xkcoding.http.support.hutool.HutoolImpl;
24-
import com.xkcoding.http.support.okhttp3.OkHttp3Impl;
2524
import com.xkcoding.http.util.ClassUtil;
2625
import lombok.experimental.UtilityClass;
2726

@@ -37,40 +36,58 @@
3736
*/
3837
@UtilityClass
3938
public class HttpUtil {
40-
private static Http proxy;
39+
private static AbstractHttp proxy;
4140

42-
static {
43-
Http defaultProxy = null;
41+
private void selectHttpProxy() {
42+
AbstractHttp defaultProxy = null;
4443
ClassLoader classLoader = HttpUtil.class.getClassLoader();
4544
// 基于 java 11 HttpClient
4645
if (ClassUtil.isPresent("java.net.http.HttpClient", classLoader)) {
47-
defaultProxy = new com.xkcoding.http.support.java11.HttpClientImpl();
46+
defaultProxy = getHttpProxy(com.xkcoding.http.support.java11.HttpClientImpl.class);
4847
}
4948
// 基于 okhttp3
50-
else if (ClassUtil.isPresent("okhttp3.OkHttpClient", classLoader)) {
51-
defaultProxy = new OkHttp3Impl();
49+
if (null == defaultProxy && ClassUtil.isPresent("okhttp3.OkHttpClient", classLoader)) {
50+
defaultProxy = getHttpProxy(com.xkcoding.http.support.okhttp3.OkHttp3Impl.class);
5251
}
5352
// 基于 httpclient
54-
else if (ClassUtil.isPresent("org.apache.http.impl.client.HttpClients", classLoader)) {
55-
defaultProxy = new HttpClientImpl();
53+
if (null == defaultProxy && ClassUtil.isPresent("org.apache.http.impl.client.HttpClients", classLoader)) {
54+
defaultProxy = getHttpProxy(com.xkcoding.http.support.httpclient.HttpClientImpl.class);
5655
}
5756
// 基于 hutool
58-
else if (ClassUtil.isPresent("cn.hutool.http.HttpRequest", classLoader)) {
59-
defaultProxy = new HutoolImpl();
57+
if (null == defaultProxy && ClassUtil.isPresent("cn.hutool.http.HttpRequest", classLoader)) {
58+
defaultProxy = getHttpProxy(com.xkcoding.http.support.hutool.HutoolImpl.class);
6059
}
60+
61+
if (defaultProxy == null) {
62+
throw new SimpleHttpException("Has no HttpImpl defined in environment!");
63+
}
64+
6165
proxy = defaultProxy;
6266
}
6367

64-
public void setHttp(Http http) {
68+
private static <T extends AbstractHttp> AbstractHttp getHttpProxy(Class<T> clazz) {
69+
try {
70+
return clazz.newInstance();
71+
} catch (Throwable e) {
72+
return null;
73+
}
74+
}
75+
76+
public void setHttp(AbstractHttp http) {
6577
proxy = http;
6678
}
67-
79+
6880
private void checkHttpNotNull(Http proxy) {
6981
if (null == proxy) {
70-
throw new SimpleHttpException("HTTP 实现类未指定!");
82+
selectHttpProxy();
7183
}
7284
}
7385

86+
public void setConfig(HttpConfig httpConfig) {
87+
checkHttpNotNull(proxy);
88+
proxy.setHttpConfig(httpConfig);
89+
}
90+
7491
/**
7592
* GET 请求
7693
*
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.xkcoding.http.config;
2+
3+
import com.xkcoding.http.constants.Constants;
4+
import lombok.Data;
5+
6+
import java.net.Proxy;
7+
8+
/**
9+
* <p>
10+
* Http 配置类
11+
* </p>
12+
*
13+
* @author yangkai.shen
14+
* @date Created in 2020-04-29 14:41
15+
*/
16+
@Data
17+
public class HttpConfig {
18+
/**
19+
* 超时时长,单位毫秒
20+
*/
21+
private int timeout = Constants.DEFAULT_TIMEOUT;
22+
/**
23+
* 代理配置
24+
*/
25+
private Proxy proxy;
26+
}

src/main/java/com/xkcoding/http/constants/Constants.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public interface Constants {
3131
/**
3232
* 超时时长,单位毫秒
3333
*/
34-
int TIMEOUT = 3000;
34+
int DEFAULT_TIMEOUT = 3000;
3535

3636
/**
3737
* 编码格式
@@ -54,12 +54,18 @@ public interface Constants {
5454
String CONTENT_ENCODING = "Content-Encoding";
5555

5656
/**
57-
* 空字符串
57+
* User-Agent
5858
*/
59-
String EMPTY = "";
59+
String USER_AGENT = "User-Agent";
6060

6161
/**
62-
* User-Agent
62+
* 模拟 User-Agent
63+
*/
64+
String USER_AGENT_DATA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36 simple-http";
65+
66+
/**
67+
* 空字符串
6368
*/
64-
String USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36 simple-http";
69+
String EMPTY = "";
70+
6571
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.xkcoding.http.support;
2+
3+
import com.xkcoding.http.config.HttpConfig;
4+
5+
/**
6+
* <p>
7+
* HTTP 抽象类
8+
* </p>
9+
*
10+
* @author yangkai.shen
11+
* @date Created in 2020-04-29 14:45
12+
*/
13+
public abstract class AbstractHttp implements Http {
14+
protected HttpConfig httpConfig;
15+
16+
public AbstractHttp(HttpConfig httpConfig) {
17+
this.httpConfig = httpConfig;
18+
}
19+
20+
public void setHttpConfig(HttpConfig httpConfig) {
21+
this.httpConfig = httpConfig;
22+
}
23+
}

src/main/java/com/xkcoding/http/support/httpclient/HttpClientImpl.java

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,15 @@
1616

1717
package com.xkcoding.http.support.httpclient;
1818

19+
import com.xkcoding.http.config.HttpConfig;
1920
import com.xkcoding.http.constants.Constants;
2021
import com.xkcoding.http.exception.SimpleHttpException;
21-
import com.xkcoding.http.support.Http;
22+
import com.xkcoding.http.support.AbstractHttp;
2223
import com.xkcoding.http.support.HttpHeader;
2324
import com.xkcoding.http.util.MapUtil;
2425
import com.xkcoding.http.util.StringUtil;
2526
import org.apache.http.Header;
26-
import org.apache.http.HttpHeaders;
27+
import org.apache.http.HttpHost;
2728
import org.apache.http.NameValuePair;
2829
import org.apache.http.client.config.RequestConfig;
2930
import org.apache.http.client.entity.UrlEncodedFormEntity;
@@ -38,6 +39,8 @@
3839
import org.apache.http.util.EntityUtils;
3940

4041
import java.io.IOException;
42+
import java.net.InetSocketAddress;
43+
import java.net.Proxy;
4144
import java.util.ArrayList;
4245
import java.util.List;
4346
import java.util.Map;
@@ -50,25 +53,35 @@
5053
* @author yangkai.shen
5154
* @date Created in 2019/12/25 09:24
5255
*/
53-
public class HttpClientImpl implements Http {
56+
public class HttpClientImpl extends AbstractHttp {
5457
private final CloseableHttpClient httpClient;
5558

5659
public HttpClientImpl() {
57-
this(HttpClients.createDefault());
60+
this(HttpClients.createDefault(), new HttpConfig());
5861
}
5962

60-
public HttpClientImpl(CloseableHttpClient httpClient) {
63+
public HttpClientImpl(HttpConfig httpConfig) {
64+
this(HttpClients.createDefault(), httpConfig);
65+
}
66+
67+
public HttpClientImpl(CloseableHttpClient httpClient, HttpConfig httpConfig) {
68+
super(httpConfig);
6169
this.httpClient = httpClient;
6270
}
6371

6472
private String exec(HttpRequestBase request) {
6573
this.addHeader(request);
6674
// 设置超时时长
67-
request.setConfig(RequestConfig.custom()
68-
.setConnectTimeout(Constants.TIMEOUT)
69-
.setSocketTimeout(Constants.TIMEOUT)
70-
.setConnectionRequestTimeout(Constants.TIMEOUT)
71-
.build());
75+
RequestConfig.Builder configBuilder = RequestConfig.custom().setConnectTimeout(httpConfig.getTimeout()).setSocketTimeout(httpConfig.getTimeout()).setConnectionRequestTimeout(httpConfig.getTimeout());
76+
// 设置代理
77+
if (null != httpConfig.getProxy()) {
78+
Proxy proxy = httpConfig.getProxy();
79+
InetSocketAddress address = (InetSocketAddress) proxy.address();
80+
HttpHost host = new HttpHost(address.getHostName(), address.getPort(), proxy.type().name().toLowerCase());
81+
configBuilder.setProxy(host);
82+
}
83+
84+
request.setConfig(configBuilder.build());
7285

7386
try (CloseableHttpResponse response = this.httpClient.execute(request)) {
7487
if (!isSuccess(response)) {
@@ -92,10 +105,10 @@ private String exec(HttpRequestBase request) {
92105
* @param request HttpRequestBase
93106
*/
94107
private void addHeader(HttpRequestBase request) {
95-
String ua = HttpHeaders.USER_AGENT;
108+
String ua = Constants.USER_AGENT;
96109
Header[] headers = request.getHeaders(ua);
97110
if (null == headers || headers.length == 0) {
98-
request.addHeader(ua, Constants.USER_AGENT);
111+
request.addHeader(ua, Constants.USER_AGENT_DATA);
99112
}
100113
}
101114

src/main/java/com/xkcoding/http/support/hutool/HutoolImpl.java

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@
1818

1919
import cn.hutool.http.HttpRequest;
2020
import cn.hutool.http.HttpResponse;
21-
import com.xkcoding.http.constants.Constants;
21+
import com.xkcoding.http.config.HttpConfig;
2222
import com.xkcoding.http.exception.SimpleHttpException;
23-
import com.xkcoding.http.support.Http;
23+
import com.xkcoding.http.support.AbstractHttp;
2424
import com.xkcoding.http.support.HttpHeader;
2525
import com.xkcoding.http.util.MapUtil;
2626
import com.xkcoding.http.util.StringUtil;
@@ -36,9 +36,23 @@
3636
* @author yangkai.shen
3737
* @date Created in 2019/12/24 19:08
3838
*/
39-
public class HutoolImpl implements Http {
39+
public class HutoolImpl extends AbstractHttp {
40+
public HutoolImpl() {
41+
this(new HttpConfig());
42+
}
43+
44+
public HutoolImpl(HttpConfig httpConfig) {
45+
super(httpConfig);
46+
}
47+
4048
private String exec(HttpRequest request) {
41-
request = request.timeout(Constants.TIMEOUT);
49+
// 设置超时时长
50+
request = request.timeout(httpConfig.getTimeout());
51+
// 设置代理
52+
if (null != httpConfig.getProxy()) {
53+
request = request.setProxy(httpConfig.getProxy());
54+
}
55+
4256
try (HttpResponse response = request.execute()) {
4357
if (!response.isOk()) {
4458
throw new SimpleHttpException("Unexpected code " + response);

0 commit comments

Comments
 (0)