From 3051a87edc82b6b7fb9fe111f257971933b78415 Mon Sep 17 00:00:00 2001 From: rememberber Date: Wed, 24 Jul 2019 14:53:40 +0800 Subject: [PATCH 01/14] =?UTF-8?q?pom:=E5=A2=9E=E5=8A=A0okhttp=E4=BE=9D?= =?UTF-8?q?=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pom.xml b/pom.xml index 26bfd251..01dbe9f0 100644 --- a/pom.xml +++ b/pom.xml @@ -43,6 +43,7 @@ 4.1.4 3.3.1 2.3.1 + 4.0.1 @@ -297,6 +298,11 @@ quartz ${quartz.version} + + com.squareup.okhttp3 + okhttp + ${okhttp.version} + From 89fae4061dfba3da7ca2a47de0273b9123aa2f06 Mon Sep 17 00:00:00 2001 From: duoduo Date: Wed, 24 Jul 2019 22:33:10 +0800 Subject: [PATCH 02/14] =?UTF-8?q?feature:http=E8=AF=B7=E6=B1=82=E4=BD=BF?= =?UTF-8?q?=E7=94=A8okhttp=E5=87=86=E5=A4=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../push/logic/msgsender/HttpMsgSender.java | 109 +++++++++++++++++- 1 file changed, 104 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/fangxuele/tool/push/logic/msgsender/HttpMsgSender.java b/src/main/java/com/fangxuele/tool/push/logic/msgsender/HttpMsgSender.java index b75b6828..e71c7c31 100644 --- a/src/main/java/com/fangxuele/tool/push/logic/msgsender/HttpMsgSender.java +++ b/src/main/java/com/fangxuele/tool/push/logic/msgsender/HttpMsgSender.java @@ -137,6 +137,110 @@ public HttpSendResult send(String[] msgData) { return sendResult; } + @Override + public SendResult asyncSend(String[] msgData) { + return null; + } + + public HttpSendResult sendUseHutool(String[] msgData) { + HttpSendResult sendResult = new HttpSendResult(); + HttpResponse httpResponse; + try { + HttpMsg httpMsg = httpMsgMaker.makeMsg(msgData); + HttpRequest httpRequest; + switch (HttpMsgMaker.method) { + case "GET": + httpRequest = HttpRequest.get(httpMsg.getUrl()); + break; + case "POST": + httpRequest = HttpRequest.post(httpMsg.getUrl()); + break; + case "PUT": + httpRequest = HttpRequest.put(httpMsg.getUrl()); + break; + case "PATCH": + httpRequest = HttpRequest.patch(httpMsg.getUrl()); + break; + case "DELETE": + httpRequest = HttpRequest.delete(httpMsg.getUrl()); + break; + case "HEAD": + httpRequest = HttpRequest.head(httpMsg.getUrl()); + break; + case "OPTIONS": + httpRequest = HttpRequest.options(httpMsg.getUrl()); + break; + default: + httpRequest = HttpRequest.get(httpMsg.getUrl()).form(httpMsg.getParamMap()); + } + if (httpMsg.getParamMap() != null && !httpMsg.getParamMap().isEmpty()) { + httpRequest.form(httpMsg.getParamMap()); + } + if (httpMsg.getHeaderMap() != null && !httpMsg.getHeaderMap().isEmpty()) { + for (Map.Entry entry : httpMsg.getHeaderMap().entrySet()) { + httpRequest.header(entry.getKey(), (String) entry.getValue()); + } + } + if (httpMsg.getCookies() != null && !httpMsg.getCookies().isEmpty()) { + for (HttpCookie cookie : httpMsg.getCookies()) { + httpRequest.cookie(cookie); + } + } + if (StringUtils.isNotEmpty(httpMsg.getBody())) { + httpRequest.body(httpMsg.getBody()); + } + if (App.config.isHttpUseProxy()) { + httpRequest.setProxy(getProxy()); + } + + if (PushControl.dryRun) { + sendResult.setSuccess(true); + return sendResult; + } else { + httpResponse = httpRequest.execute(true); + if (!httpResponse.isOk()) { + sendResult.setSuccess(false); + sendResult.setInfo(httpResponse.toString()); + return sendResult; + } + } + } catch (Exception e) { + sendResult.setSuccess(false); + sendResult.setInfo(e.getMessage()); + log.error(e.toString()); + return sendResult; + } + StringBuilder headerBuilder = StrUtil.builder(); + for (Map.Entry> entry : httpResponse.headers().entrySet()) { + headerBuilder.append(entry).append(StrUtil.CRLF); + } + sendResult.setHeaders(headerBuilder.toString()); + + String body = httpResponse.body(); + sendResult.setInfo(body); + if (body != null && body.startsWith("{") && body.endsWith("}")) { + try { + body = JSONUtil.toJsonPrettyStr(body); + } catch (Exception e) { + log.error(e.toString()); + } + } + sendResult.setBody(body); + + StringBuilder cookiesBuilder = StrUtil.builder(); + List headerList = httpResponse.headerList(Header.SET_COOKIE.toString()); + if (headerList != null) { + for (String cookieStr : headerList) { + cookiesBuilder.append(cookieStr).append(StrUtil.CRLF); + } + } + + sendResult.setCookies(cookiesBuilder.toString()); + + sendResult.setSuccess(true); + return sendResult; + } + private static Proxy getProxy() { if (proxy == null) { synchronized (HttpMsgSender.class) { @@ -147,9 +251,4 @@ private static Proxy getProxy() { } return proxy; } - - @Override - public SendResult asyncSend(String[] msgData) { - return null; - } } From 32e855fc3f407167006455d8298f53e8ea036632 Mon Sep 17 00:00:00 2001 From: duoduo Date: Sat, 27 Jul 2019 22:13:46 +0800 Subject: [PATCH 03/14] =?UTF-8?q?feature:http=E8=AF=B7=E6=B1=82=E4=BD=BF?= =?UTF-8?q?=E7=94=A8okhttp=E7=AC=AC=E4=B8=80=E9=98=B6=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../push/logic/msgsender/HttpMsgSender.java | 147 ++++++++++-------- 1 file changed, 79 insertions(+), 68 deletions(-) diff --git a/src/main/java/com/fangxuele/tool/push/logic/msgsender/HttpMsgSender.java b/src/main/java/com/fangxuele/tool/push/logic/msgsender/HttpMsgSender.java index e71c7c31..d3eb3f4e 100644 --- a/src/main/java/com/fangxuele/tool/push/logic/msgsender/HttpMsgSender.java +++ b/src/main/java/com/fangxuele/tool/push/logic/msgsender/HttpMsgSender.java @@ -10,6 +10,12 @@ import com.fangxuele.tool.push.logic.PushControl; import com.fangxuele.tool.push.logic.msgmaker.HttpMsgMaker; import lombok.extern.slf4j.Slf4j; +import okhttp3.FormBody; +import okhttp3.MediaType; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; import org.apache.commons.lang3.StringUtils; import java.net.HttpCookie; @@ -31,14 +37,26 @@ public class HttpMsgSender implements IMsgSender { private HttpMsgMaker httpMsgMaker; + private OkHttpClient okHttpClient; + public volatile static Proxy proxy; public HttpMsgSender() { httpMsgMaker = new HttpMsgMaker(); + okHttpClient = new OkHttpClient(); } @Override public HttpSendResult send(String[] msgData) { + return sendUseOkHttp(msgData); + } + + @Override + public SendResult asyncSend(String[] msgData) { + return null; + } + + public HttpSendResult sendUseHutool(String[] msgData) { HttpSendResult sendResult = new HttpSendResult(); HttpResponse httpResponse; try { @@ -137,72 +155,94 @@ public HttpSendResult send(String[] msgData) { return sendResult; } - @Override - public SendResult asyncSend(String[] msgData) { - return null; - } - - public HttpSendResult sendUseHutool(String[] msgData) { + public HttpSendResult sendUseOkHttp(String[] msgData) { HttpSendResult sendResult = new HttpSendResult(); - HttpResponse httpResponse; try { HttpMsg httpMsg = httpMsgMaker.makeMsg(msgData); - HttpRequest httpRequest; + + Request.Builder requestBuilder = new Request.Builder(); + + RequestBody requestBody = null; + if (httpMsg.getParamMap() != null && !httpMsg.getParamMap().isEmpty()) { + FormBody.Builder formBodyBuilder = new FormBody.Builder(); + for (Map.Entry paramEntry : httpMsg.getParamMap().entrySet()) { + formBodyBuilder.add(paramEntry.getKey(), (String) paramEntry.getValue()); + } + requestBody = formBodyBuilder.build(); + } else if (StringUtils.isNotEmpty(httpMsg.getBody())) { + MediaType mediaType = MediaType.get("application/json; charset=utf-8"); + requestBody = RequestBody.create(httpMsg.getBody(), mediaType); + } + + if (httpMsg.getHeaderMap() != null && !httpMsg.getHeaderMap().isEmpty()) { + for (Map.Entry headerEntry : httpMsg.getHeaderMap().entrySet()) { + requestBuilder.addHeader(headerEntry.getKey(), (String) headerEntry.getValue()); + } + } switch (HttpMsgMaker.method) { case "GET": - httpRequest = HttpRequest.get(httpMsg.getUrl()); + requestBuilder.url(httpMsg.getUrl()).get(); break; case "POST": - httpRequest = HttpRequest.post(httpMsg.getUrl()); + requestBuilder.url(httpMsg.getUrl()).post(requestBody); break; case "PUT": - httpRequest = HttpRequest.put(httpMsg.getUrl()); + requestBuilder.url(httpMsg.getUrl()).put(requestBody); break; case "PATCH": - httpRequest = HttpRequest.patch(httpMsg.getUrl()); + requestBuilder.url(httpMsg.getUrl()).patch(requestBody); break; case "DELETE": - httpRequest = HttpRequest.delete(httpMsg.getUrl()); + requestBuilder.url(httpMsg.getUrl()).delete(requestBody); break; case "HEAD": - httpRequest = HttpRequest.head(httpMsg.getUrl()); + requestBuilder.url(httpMsg.getUrl()).head(); break; case "OPTIONS": - httpRequest = HttpRequest.options(httpMsg.getUrl()); - break; + return sendUseHutool(msgData); default: - httpRequest = HttpRequest.get(httpMsg.getUrl()).form(httpMsg.getParamMap()); - } - if (httpMsg.getParamMap() != null && !httpMsg.getParamMap().isEmpty()) { - httpRequest.form(httpMsg.getParamMap()); - } - if (httpMsg.getHeaderMap() != null && !httpMsg.getHeaderMap().isEmpty()) { - for (Map.Entry entry : httpMsg.getHeaderMap().entrySet()) { - httpRequest.header(entry.getKey(), (String) entry.getValue()); - } - } - if (httpMsg.getCookies() != null && !httpMsg.getCookies().isEmpty()) { - for (HttpCookie cookie : httpMsg.getCookies()) { - httpRequest.cookie(cookie); - } - } - if (StringUtils.isNotEmpty(httpMsg.getBody())) { - httpRequest.body(httpMsg.getBody()); - } - if (App.config.isHttpUseProxy()) { - httpRequest.setProxy(getProxy()); + requestBuilder.url(httpMsg.getUrl()); } + Request request = requestBuilder.build(); + if (PushControl.dryRun) { sendResult.setSuccess(true); return sendResult; } else { - httpResponse = httpRequest.execute(true); - if (!httpResponse.isOk()) { + Response response = okHttpClient.newCall(request).execute(); + if (!response.isSuccessful()) { sendResult.setSuccess(false); - sendResult.setInfo(httpResponse.toString()); + sendResult.setInfo(response.toString()); return sendResult; } + + String responseBody = ""; + if (response.body() != null) { + responseBody = response.body().string(); + } + sendResult.setInfo(responseBody); + if (responseBody.startsWith("{") && responseBody.endsWith("}")) { + try { + responseBody = JSONUtil.toJsonPrettyStr(responseBody); + } catch (Exception e) { + log.error(e.toString()); + } + } + sendResult.setBody(responseBody); + + sendResult.setHeaders(response.headers().toString()); + + StringBuilder cookiesBuilder = StrUtil.builder(); + List headerList = response.headers(Header.SET_COOKIE.toString()); + for (String cookieStr : headerList) { + cookiesBuilder.append(cookieStr).append(StrUtil.CRLF); + } + + sendResult.setCookies(cookiesBuilder.toString()); + + sendResult.setSuccess(true); + return sendResult; } } catch (Exception e) { sendResult.setSuccess(false); @@ -210,35 +250,6 @@ public HttpSendResult sendUseHutool(String[] msgData) { log.error(e.toString()); return sendResult; } - StringBuilder headerBuilder = StrUtil.builder(); - for (Map.Entry> entry : httpResponse.headers().entrySet()) { - headerBuilder.append(entry).append(StrUtil.CRLF); - } - sendResult.setHeaders(headerBuilder.toString()); - - String body = httpResponse.body(); - sendResult.setInfo(body); - if (body != null && body.startsWith("{") && body.endsWith("}")) { - try { - body = JSONUtil.toJsonPrettyStr(body); - } catch (Exception e) { - log.error(e.toString()); - } - } - sendResult.setBody(body); - - StringBuilder cookiesBuilder = StrUtil.builder(); - List headerList = httpResponse.headerList(Header.SET_COOKIE.toString()); - if (headerList != null) { - for (String cookieStr : headerList) { - cookiesBuilder.append(cookieStr).append(StrUtil.CRLF); - } - } - - sendResult.setCookies(cookiesBuilder.toString()); - - sendResult.setSuccess(true); - return sendResult; } private static Proxy getProxy() { From 87782245153478a08020df06a86e6cf8117749d6 Mon Sep 17 00:00:00 2001 From: duoduo Date: Sun, 28 Jul 2019 10:30:18 +0800 Subject: [PATCH 04/14] =?UTF-8?q?feature:http=E8=AF=B7=E6=B1=82=E4=BD=BF?= =?UTF-8?q?=E7=94=A8okhttp=E7=AC=AC=E4=B8=80=E9=98=B6=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fangxuele/tool/push/logic/msgsender/HttpMsgSender.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/fangxuele/tool/push/logic/msgsender/HttpMsgSender.java b/src/main/java/com/fangxuele/tool/push/logic/msgsender/HttpMsgSender.java index d3eb3f4e..df4a75f6 100644 --- a/src/main/java/com/fangxuele/tool/push/logic/msgsender/HttpMsgSender.java +++ b/src/main/java/com/fangxuele/tool/push/logic/msgsender/HttpMsgSender.java @@ -1,5 +1,6 @@ package com.fangxuele.tool.push.logic.msgsender; +import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.http.Header; import cn.hutool.http.HttpRequest; @@ -96,9 +97,8 @@ public HttpSendResult sendUseHutool(String[] msgData) { } } if (httpMsg.getCookies() != null && !httpMsg.getCookies().isEmpty()) { - for (HttpCookie cookie : httpMsg.getCookies()) { - httpRequest.cookie(cookie); - } + HttpCookie[] cookies = ArrayUtil.toArray(httpMsg.getCookies(), HttpCookie.class); + httpRequest.cookie(cookies); } if (StringUtils.isNotEmpty(httpMsg.getBody())) { httpRequest.body(httpMsg.getBody()); From 4427ab8c780b650bfaddd29584c86db8ba16bc2c Mon Sep 17 00:00:00 2001 From: duoduo Date: Sun, 28 Jul 2019 10:35:43 +0800 Subject: [PATCH 05/14] =?UTF-8?q?feature:http=E8=AF=B7=E6=B1=82=E4=BD=BF?= =?UTF-8?q?=E7=94=A8okhttp=E7=AC=AC=E4=B8=80=E9=98=B6=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fangxuele/tool/push/logic/msgsender/HttpMsgSender.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/fangxuele/tool/push/logic/msgsender/HttpMsgSender.java b/src/main/java/com/fangxuele/tool/push/logic/msgsender/HttpMsgSender.java index df4a75f6..ea302206 100644 --- a/src/main/java/com/fangxuele/tool/push/logic/msgsender/HttpMsgSender.java +++ b/src/main/java/com/fangxuele/tool/push/logic/msgsender/HttpMsgSender.java @@ -111,7 +111,7 @@ public HttpSendResult sendUseHutool(String[] msgData) { sendResult.setSuccess(true); return sendResult; } else { - httpResponse = httpRequest.execute(true); + httpResponse = httpRequest.execute(); if (!httpResponse.isOk()) { sendResult.setSuccess(false); sendResult.setInfo(httpResponse.toString()); From ef1ea8671f17f65780b89e0ed2429a014ed32139 Mon Sep 17 00:00:00 2001 From: duoduo Date: Sun, 28 Jul 2019 11:55:22 +0800 Subject: [PATCH 06/14] =?UTF-8?q?feature:http=E8=AF=B7=E6=B1=82=E4=BD=BF?= =?UTF-8?q?=E7=94=A8okhttp=E7=AC=AC=E4=B8=80=E9=98=B6=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tool/push/logic/msgsender/HttpMsgSender.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/fangxuele/tool/push/logic/msgsender/HttpMsgSender.java b/src/main/java/com/fangxuele/tool/push/logic/msgsender/HttpMsgSender.java index ea302206..419776ca 100644 --- a/src/main/java/com/fangxuele/tool/push/logic/msgsender/HttpMsgSender.java +++ b/src/main/java/com/fangxuele/tool/push/logic/msgsender/HttpMsgSender.java @@ -24,6 +24,7 @@ import java.net.Proxy; import java.util.List; import java.util.Map; +import java.util.concurrent.TimeUnit; /** *
@@ -44,7 +45,13 @@ public class HttpMsgSender implements IMsgSender {
 
     public HttpMsgSender() {
         httpMsgMaker = new HttpMsgMaker();
-        okHttpClient = new OkHttpClient();
+
+        OkHttpClient.Builder builder = new OkHttpClient.Builder();
+        builder.connectTimeout(3, TimeUnit.MINUTES);
+        if (App.config.isHttpUseProxy()) {
+            builder.proxy(getProxy());
+        }
+        okHttpClient = builder.build();
     }
 
     @Override
@@ -179,6 +186,10 @@ public HttpSendResult sendUseOkHttp(String[] msgData) {
                     requestBuilder.addHeader(headerEntry.getKey(), (String) headerEntry.getValue());
                 }
             }
+            if (httpMsg.getCookies() != null && !httpMsg.getCookies().isEmpty()) {
+                HttpCookie[] cookies = ArrayUtil.toArray(httpMsg.getCookies(), HttpCookie.class);
+                requestBuilder.addHeader(Header.COOKIE.toString(), ArrayUtil.join(cookies, ";"));
+            }
             switch (HttpMsgMaker.method) {
                 case "GET":
                     requestBuilder.url(httpMsg.getUrl()).get();

From d86f50cfc82339c537c9242a4bb66cdb759b642d Mon Sep 17 00:00:00 2001
From: duoduo 
Date: Sun, 28 Jul 2019 15:46:52 +0800
Subject: [PATCH 07/14] =?UTF-8?q?feature:http=E8=AF=B7=E6=B1=82=E4=BD=BF?=
 =?UTF-8?q?=E7=94=A8okhttp=E7=AC=AC=E4=BA=8C=E9=98=B6=E6=AE=B5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../push/logic/msgsender/HttpMsgSender.java   | 30 ++++++++++++++-----
 1 file changed, 22 insertions(+), 8 deletions(-)

diff --git a/src/main/java/com/fangxuele/tool/push/logic/msgsender/HttpMsgSender.java b/src/main/java/com/fangxuele/tool/push/logic/msgsender/HttpMsgSender.java
index 419776ca..e00faf1d 100644
--- a/src/main/java/com/fangxuele/tool/push/logic/msgsender/HttpMsgSender.java
+++ b/src/main/java/com/fangxuele/tool/push/logic/msgsender/HttpMsgSender.java
@@ -11,6 +11,7 @@
 import com.fangxuele.tool.push.logic.PushControl;
 import com.fangxuele.tool.push.logic.msgmaker.HttpMsgMaker;
 import lombok.extern.slf4j.Slf4j;
+import okhttp3.ConnectionPool;
 import okhttp3.FormBody;
 import okhttp3.MediaType;
 import okhttp3.OkHttpClient;
@@ -39,19 +40,13 @@ public class HttpMsgSender implements IMsgSender {
 
     private HttpMsgMaker httpMsgMaker;
 
-    private OkHttpClient okHttpClient;
+    public volatile static OkHttpClient okHttpClient;
 
     public volatile static Proxy proxy;
 
     public HttpMsgSender() {
         httpMsgMaker = new HttpMsgMaker();
-
-        OkHttpClient.Builder builder = new OkHttpClient.Builder();
-        builder.connectTimeout(3, TimeUnit.MINUTES);
-        if (App.config.isHttpUseProxy()) {
-            builder.proxy(getProxy());
-        }
-        okHttpClient = builder.build();
+        okHttpClient = getOkHttpClient();
     }
 
     @Override
@@ -273,4 +268,23 @@ private static Proxy getProxy() {
         }
         return proxy;
     }
+
+    public static OkHttpClient getOkHttpClient() {
+        if (okHttpClient == null) {
+            synchronized (HttpMsgSender.class) {
+                if (okHttpClient == null) {
+                    OkHttpClient.Builder builder = new OkHttpClient.Builder();
+                    builder.connectTimeout(3, TimeUnit.MINUTES);
+                    if (App.config.isHttpUseProxy()) {
+                        builder.proxy(getProxy());
+                    }
+
+                    ConnectionPool pool = new ConnectionPool(App.config.getThreadCount(), 10, TimeUnit.MINUTES);
+                    builder.connectionPool(pool);
+                    okHttpClient = builder.build();
+                }
+            }
+        }
+        return okHttpClient;
+    }
 }

From e97380745f4981c757103a81a8a6e9fbd3cf1c78 Mon Sep 17 00:00:00 2001
From: duoduo 
Date: Sun, 28 Jul 2019 17:46:25 +0800
Subject: [PATCH 08/14] =?UTF-8?q?feature:http=E6=B6=88=E6=81=AF=E8=A1=A8?=
 =?UTF-8?q?=E5=A2=9E=E5=8A=A0body=5Ftype=E5=AD=97=E6=AE=B5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../fangxuele/tool/push/domain/TMsgHttp.java  | 10 +++++++++
 src/main/resources/db_init.sql                |  1 +
 src/main/resources/mapper/TMsgHttpMapper.xml  | 21 ++++++++++++++-----
 src/main/resources/upgrade/30.sql             |  2 ++
 4 files changed, 29 insertions(+), 5 deletions(-)
 create mode 100644 src/main/resources/upgrade/30.sql

diff --git a/src/main/java/com/fangxuele/tool/push/domain/TMsgHttp.java b/src/main/java/com/fangxuele/tool/push/domain/TMsgHttp.java
index f70602ca..5624365e 100644
--- a/src/main/java/com/fangxuele/tool/push/domain/TMsgHttp.java
+++ b/src/main/java/com/fangxuele/tool/push/domain/TMsgHttp.java
@@ -25,6 +25,8 @@ public class TMsgHttp implements Serializable {
 
     private String modifiedTime;
 
+    private String bodyType;
+
     private static final long serialVersionUID = 1L;
 
     public Integer getId() {
@@ -114,4 +116,12 @@ public String getModifiedTime() {
     public void setModifiedTime(String modifiedTime) {
         this.modifiedTime = modifiedTime == null ? null : modifiedTime.trim();
     }
+
+    public String getBodyType() {
+        return bodyType;
+    }
+
+    public void setBodyType(String bodyType) {
+        this.bodyType = bodyType == null ? null : bodyType.trim();
+    }
 }
\ No newline at end of file
diff --git a/src/main/resources/db_init.sql b/src/main/resources/db_init.sql
index 570f3a64..d3f60f3a 100644
--- a/src/main/resources/db_init.sql
+++ b/src/main/resources/db_init.sql
@@ -215,6 +215,7 @@ create table if not exists t_msg_http
     headers       text,
     cookies       text,
     body          text,
+    body_type     text,
     create_time   datetime,
     modified_time datetime
 );
diff --git a/src/main/resources/mapper/TMsgHttpMapper.xml b/src/main/resources/mapper/TMsgHttpMapper.xml
index c885a532..acebb97c 100644
--- a/src/main/resources/mapper/TMsgHttpMapper.xml
+++ b/src/main/resources/mapper/TMsgHttpMapper.xml
@@ -13,10 +13,11 @@
         
         
         
+        
     
     
         id, msg_type, msg_name, method, url, params, headers, cookies, body, create_time,
-    modified_time
+    modified_time, body_type
     
     
@@ -177,6 +187,7 @@
             headers       = #{headers,jdbcType=VARCHAR},
             cookies       = #{cookies,jdbcType=VARCHAR},
             body          = #{body,jdbcType=VARCHAR},
+            body_type     = #{bodyType,jdbcType=VARCHAR},
             modified_time = #{modifiedTime,jdbcType=VARCHAR}
         where msg_type = #{msgType,jdbcType=INTEGER}
           and msg_name = #{msgName,jdbcType=VARCHAR}
diff --git a/src/main/resources/upgrade/30.sql b/src/main/resources/upgrade/30.sql
new file mode 100644
index 00000000..1bfc3a57
--- /dev/null
+++ b/src/main/resources/upgrade/30.sql
@@ -0,0 +1,2 @@
+alter table t_msg_http
+    add body_type text;
\ No newline at end of file

From 543eeeef913c83419b9224d9a1a23dfb12ed7124 Mon Sep 17 00:00:00 2001
From: duoduo 
Date: Sun, 28 Jul 2019 18:04:02 +0800
Subject: [PATCH 09/14] =?UTF-8?q?feature:http=E6=B6=88=E6=81=AF=E8=A1=A8?=
 =?UTF-8?q?=E5=A2=9E=E5=8A=A0body=5Ftype=E5=AD=97=E6=AE=B5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../push/logic/msgmaker/HttpMsgMaker.java     |  2 ++
 .../tool/push/ui/form/msg/HttpMsgForm.form    | 24 +++++++++++++++++--
 .../tool/push/ui/form/msg/HttpMsgForm.java    | 22 +++++++++++++++--
 3 files changed, 44 insertions(+), 4 deletions(-)

diff --git a/src/main/java/com/fangxuele/tool/push/logic/msgmaker/HttpMsgMaker.java b/src/main/java/com/fangxuele/tool/push/logic/msgmaker/HttpMsgMaker.java
index e9bcc4fe..a8de0f13 100644
--- a/src/main/java/com/fangxuele/tool/push/logic/msgmaker/HttpMsgMaker.java
+++ b/src/main/java/com/fangxuele/tool/push/logic/msgmaker/HttpMsgMaker.java
@@ -29,6 +29,7 @@ public class HttpMsgMaker extends BaseMsgMaker implements IMsgMaker {
     public static String method;
     public static String url;
     public static String body;
+    public static String bodyType;
     public static List paramList;
     public static List headerList;
     public static List cookieList;
@@ -38,6 +39,7 @@ public void prepare() {
         method = (String) HttpMsgForm.getInstance().getMethodComboBox().getSelectedItem();
         url = HttpMsgForm.getInstance().getUrlTextField().getText().trim();
         body = HttpMsgForm.getInstance().getBodyTextArea().getText();
+        bodyType = (String) HttpMsgForm.getInstance().getBodyTypeComboBox().getSelectedItem();
 
         // Params=========================
         if (HttpMsgForm.getInstance().getParamTable().getModel().getRowCount() == 0) {
diff --git a/src/main/java/com/fangxuele/tool/push/ui/form/msg/HttpMsgForm.form b/src/main/java/com/fangxuele/tool/push/ui/form/msg/HttpMsgForm.form
index b99c3851..6e2269ad 100644
--- a/src/main/java/com/fangxuele/tool/push/ui/form/msg/HttpMsgForm.form
+++ b/src/main/java/com/fangxuele/tool/push/ui/form/msg/HttpMsgForm.form
@@ -328,7 +328,7 @@
             
             
             
-              
+              
                 
                 
                   
@@ -338,12 +338,32 @@
                 
                   
                     
-                      
+                      
                         
                       
                     
                     
                   
+                  
+                    
+                      
+                    
+                    
+                      
+                        
+                        
+                        
+                        
+                        
+                        
+                      
+                    
+                  
+                  
+                    
+                      
+                    
+                  
                 
               
             
diff --git a/src/main/java/com/fangxuele/tool/push/ui/form/msg/HttpMsgForm.java b/src/main/java/com/fangxuele/tool/push/ui/form/msg/HttpMsgForm.java
index 81f78e18..3cbf54ab 100644
--- a/src/main/java/com/fangxuele/tool/push/ui/form/msg/HttpMsgForm.java
+++ b/src/main/java/com/fangxuele/tool/push/ui/form/msg/HttpMsgForm.java
@@ -10,6 +10,7 @@
 import com.fangxuele.tool.push.util.SqliteUtil;
 import com.intellij.uiDesigner.core.GridConstraints;
 import com.intellij.uiDesigner.core.GridLayoutManager;
+import com.intellij.uiDesigner.core.Spacer;
 import lombok.Getter;
 import lombok.Setter;
 import org.apache.commons.lang3.StringUtils;
@@ -56,6 +57,7 @@ public class HttpMsgForm implements IMsgForm {
     private JTextField cookieExpiryTextField;
     private JTextArea bodyTextArea;
     private JTabbedPane tabbedPane1;
+    private JComboBox bodyTypeComboBox;
 
     private static HttpMsgForm httpMsgForm;
 
@@ -172,6 +174,7 @@ public void init(String msgName) {
             getInstance().getMethodComboBox().setSelectedItem(tMsgHttp.getMethod());
             getInstance().getUrlTextField().setText(tMsgHttp.getUrl());
             getInstance().getBodyTextArea().setText(tMsgHttp.getBody());
+            getInstance().getBodyTypeComboBox().setSelectedItem(tMsgHttp.getBodyType());
             switchMethod(tMsgHttp.getMethod());
 
             // Params=====================================
@@ -262,6 +265,7 @@ public void save(String msgName) {
             String method = (String) getInstance().getMethodComboBox().getSelectedItem();
             String url = getInstance().getUrlTextField().getText();
             String body = getInstance().getBodyTextArea().getText();
+            String bodyType = (String) getInstance().getBodyTypeComboBox().getSelectedItem();
             String now = SqliteUtil.nowDateForSqlite();
 
             TMsgHttp tMsgHttp = new TMsgHttp();
@@ -270,6 +274,7 @@ public void save(String msgName) {
             tMsgHttp.setMethod(method);
             tMsgHttp.setUrl(url);
             tMsgHttp.setBody(body);
+            tMsgHttp.setBodyType(bodyType);
             tMsgHttp.setCreateTime(now);
             tMsgHttp.setModifiedTime(now);
 
@@ -370,6 +375,7 @@ public static void clearAllField() {
         getInstance().getCookiePathTextField().setText("");
         getInstance().getCookieExpiryTextField().setText("");
         getInstance().getBodyTextArea().setText("");
+        getInstance().getBodyTypeComboBox().setSelectedIndex(0);
         initParamTable();
         initHeaderTable();
         initCookieTable();
@@ -617,10 +623,22 @@ public static class CookieObject implements Serializable {
         panel8.setLayout(new GridLayoutManager(1, 1, new Insets(0, 0, 0, 0), -1, -1));
         tabbedPane1.addTab("Body", panel8);
         final JPanel panel9 = new JPanel();
-        panel9.setLayout(new GridLayoutManager(1, 1, new Insets(5, 0, 0, 0), -1, -1));
+        panel9.setLayout(new GridLayoutManager(2, 2, new Insets(5, 0, 0, 0), -1, -1));
         panel8.add(panel9, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false));
         bodyTextArea = new JTextArea();
-        panel9.add(bodyTextArea, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_WANT_GROW, null, new Dimension(150, 50), null, 0, false));
+        panel9.add(bodyTextArea, new GridConstraints(1, 0, 1, 2, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_WANT_GROW, null, new Dimension(150, 50), null, 0, false));
+        bodyTypeComboBox = new JComboBox();
+        final DefaultComboBoxModel defaultComboBoxModel2 = new DefaultComboBoxModel();
+        defaultComboBoxModel2.addElement("text/plain");
+        defaultComboBoxModel2.addElement("application/json");
+        defaultComboBoxModel2.addElement("application/javascript");
+        defaultComboBoxModel2.addElement("application/xml");
+        defaultComboBoxModel2.addElement("text/xml");
+        defaultComboBoxModel2.addElement("text/html");
+        bodyTypeComboBox.setModel(defaultComboBoxModel2);
+        panel9.add(bodyTypeComboBox, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+        final Spacer spacer1 = new Spacer();
+        panel9.add(spacer1, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, null, null, 0, false));
     }
 
     /**

From c9cc773614e9d8a2fc29484c3d7351b17fef9c5d Mon Sep 17 00:00:00 2001
From: duoduo 
Date: Sun, 28 Jul 2019 18:11:51 +0800
Subject: [PATCH 10/14] =?UTF-8?q?feature:http=E6=B6=88=E6=81=AF=E6=94=AF?=
 =?UTF-8?q?=E6=8C=81bodyType?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../com/fangxuele/tool/push/logic/msgsender/HttpMsgSender.java | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/main/java/com/fangxuele/tool/push/logic/msgsender/HttpMsgSender.java b/src/main/java/com/fangxuele/tool/push/logic/msgsender/HttpMsgSender.java
index e00faf1d..87d7a64b 100644
--- a/src/main/java/com/fangxuele/tool/push/logic/msgsender/HttpMsgSender.java
+++ b/src/main/java/com/fangxuele/tool/push/logic/msgsender/HttpMsgSender.java
@@ -172,7 +172,8 @@ public HttpSendResult sendUseOkHttp(String[] msgData) {
                 }
                 requestBody = formBodyBuilder.build();
             } else if (StringUtils.isNotEmpty(httpMsg.getBody())) {
-                MediaType mediaType = MediaType.get("application/json; charset=utf-8");
+                String bodyType = HttpMsgMaker.bodyType;
+                MediaType mediaType = MediaType.get(bodyType + "; charset=utf-8");
                 requestBody = RequestBody.create(httpMsg.getBody(), mediaType);
             }
 

From e4051d68aa50c922f883c792bfae455b457cd252 Mon Sep 17 00:00:00 2001
From: duoduo 
Date: Sun, 28 Jul 2019 18:20:39 +0800
Subject: [PATCH 11/14] =?UTF-8?q?feature:http=E6=B6=88=E6=81=AF=E6=94=AF?=
 =?UTF-8?q?=E6=8C=81okhttp=E5=AE=8C=E7=BB=93?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../tool/push/logic/msgsender/HttpMsgSender.java      | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/fangxuele/tool/push/logic/msgsender/HttpMsgSender.java b/src/main/java/com/fangxuele/tool/push/logic/msgsender/HttpMsgSender.java
index 87d7a64b..57f0d7e2 100644
--- a/src/main/java/com/fangxuele/tool/push/logic/msgsender/HttpMsgSender.java
+++ b/src/main/java/com/fangxuele/tool/push/logic/msgsender/HttpMsgSender.java
@@ -13,6 +13,7 @@
 import lombok.extern.slf4j.Slf4j;
 import okhttp3.ConnectionPool;
 import okhttp3.FormBody;
+import okhttp3.HttpUrl;
 import okhttp3.MediaType;
 import okhttp3.OkHttpClient;
 import okhttp3.Request;
@@ -165,7 +166,7 @@ public HttpSendResult sendUseOkHttp(String[] msgData) {
             Request.Builder requestBuilder = new Request.Builder();
 
             RequestBody requestBody = null;
-            if (httpMsg.getParamMap() != null && !httpMsg.getParamMap().isEmpty()) {
+            if (!"GET".equals(HttpMsgMaker.method) && httpMsg.getParamMap() != null && !httpMsg.getParamMap().isEmpty()) {
                 FormBody.Builder formBodyBuilder = new FormBody.Builder();
                 for (Map.Entry paramEntry : httpMsg.getParamMap().entrySet()) {
                     formBodyBuilder.add(paramEntry.getKey(), (String) paramEntry.getValue());
@@ -188,7 +189,13 @@ public HttpSendResult sendUseOkHttp(String[] msgData) {
             }
             switch (HttpMsgMaker.method) {
                 case "GET":
-                    requestBuilder.url(httpMsg.getUrl()).get();
+                    HttpUrl.Builder urlBuilder = HttpUrl.parse(httpMsg.getUrl()).newBuilder();
+                    if (httpMsg.getParamMap() != null && !httpMsg.getParamMap().isEmpty()) {
+                        for (Map.Entry paramEntry : httpMsg.getParamMap().entrySet()) {
+                            urlBuilder.addQueryParameter(paramEntry.getKey(), (String) paramEntry.getValue());
+                        }
+                    }
+                    requestBuilder.url(urlBuilder.build()).get();
                     break;
                 case "POST":
                     requestBuilder.url(httpMsg.getUrl()).post(requestBody);

From 5ee47c3e3ddf332ed392f3637820edd15f45f2a1 Mon Sep 17 00:00:00 2001
From: duoduo 
Date: Sun, 28 Jul 2019 20:59:09 +0800
Subject: [PATCH 12/14] =?UTF-8?q?feature:http=E6=B6=88=E6=81=AF=E6=94=AF?=
 =?UTF-8?q?=E6=8C=81okhttp=E5=AE=8C=E7=BB=93?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../tool/push/logic/msgmaker/HttpMsgMaker.java    |  2 +-
 .../tool/push/logic/msgsender/HttpMsgSender.java  | 15 +++++++++++++--
 2 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/src/main/java/com/fangxuele/tool/push/logic/msgmaker/HttpMsgMaker.java b/src/main/java/com/fangxuele/tool/push/logic/msgmaker/HttpMsgMaker.java
index a8de0f13..7f01a933 100644
--- a/src/main/java/com/fangxuele/tool/push/logic/msgmaker/HttpMsgMaker.java
+++ b/src/main/java/com/fangxuele/tool/push/logic/msgmaker/HttpMsgMaker.java
@@ -122,7 +122,7 @@ public HttpMsg makeMsg(String[] msgData) {
             httpCookie.setDomain(cookieObject.getDomain());
             httpCookie.setPath(cookieObject.getPath());
             try {
-                httpCookie.setMaxAge(DateUtils.parseDate(cookieObject.getExpiry(), "yyyy-MM-dd").getTime());
+                httpCookie.setMaxAge(DateUtils.parseDate(cookieObject.getExpiry(), "yyyy-MM-dd HH:mm:ss").getTime());
             } catch (ParseException e) {
                 log.error(e.toString());
             }
diff --git a/src/main/java/com/fangxuele/tool/push/logic/msgsender/HttpMsgSender.java b/src/main/java/com/fangxuele/tool/push/logic/msgsender/HttpMsgSender.java
index 57f0d7e2..59986f26 100644
--- a/src/main/java/com/fangxuele/tool/push/logic/msgsender/HttpMsgSender.java
+++ b/src/main/java/com/fangxuele/tool/push/logic/msgsender/HttpMsgSender.java
@@ -184,8 +184,7 @@ public HttpSendResult sendUseOkHttp(String[] msgData) {
                 }
             }
             if (httpMsg.getCookies() != null && !httpMsg.getCookies().isEmpty()) {
-                HttpCookie[] cookies = ArrayUtil.toArray(httpMsg.getCookies(), HttpCookie.class);
-                requestBuilder.addHeader(Header.COOKIE.toString(), ArrayUtil.join(cookies, ";"));
+                requestBuilder.addHeader(Header.COOKIE.toString(), cookieHeader(httpMsg.getCookies()));
             }
             switch (HttpMsgMaker.method) {
                 case "GET":
@@ -266,6 +265,18 @@ public HttpSendResult sendUseOkHttp(String[] msgData) {
         }
     }
 
+    private String cookieHeader(List cookies) {
+        StringBuilder cookieHeader = new StringBuilder();
+        for (int i = 0, size = cookies.size(); i < size; i++) {
+            if (i > 0) {
+                cookieHeader.append("; ");
+            }
+            HttpCookie cookie = cookies.get(i);
+            cookieHeader.append(cookie.getName()).append('=').append(cookie.getValue());
+        }
+        return cookieHeader.toString();
+    }
+
     private static Proxy getProxy() {
         if (proxy == null) {
             synchronized (HttpMsgSender.class) {

From 07a57996e5ef90745d86737eedf989e41b6823ee Mon Sep 17 00:00:00 2001
From: duoduo 
Date: Sun, 28 Jul 2019 21:12:41 +0800
Subject: [PATCH 13/14] release:v_3.6.1_190728

---
 src/main/java/com/fangxuele/tool/push/ui/UiConsts.java |  2 +-
 src/main/resources/version_summary.json                | 10 ++++++++--
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/src/main/java/com/fangxuele/tool/push/ui/UiConsts.java b/src/main/java/com/fangxuele/tool/push/ui/UiConsts.java
index 228bd68a..6cbb2188 100644
--- a/src/main/java/com/fangxuele/tool/push/ui/UiConsts.java
+++ b/src/main/java/com/fangxuele/tool/push/ui/UiConsts.java
@@ -16,7 +16,7 @@ public class UiConsts {
      * 软件名称,版本
      */
     public final static String APP_NAME = "WePush";
-    public final static String APP_VERSION = "v_3.6.0_190721";
+    public final static String APP_VERSION = "v_3.6.1_190728";
 
     /**
      * 主窗口图标-大
diff --git a/src/main/resources/version_summary.json b/src/main/resources/version_summary.json
index b15c193e..1a21a799 100644
--- a/src/main/resources/version_summary.json
+++ b/src/main/resources/version_summary.json
@@ -1,5 +1,5 @@
 {
-  "currentVersion": "v_3.6.0_190721",
+  "currentVersion": "v_3.6.1_190728",
   "versionIndex": {
     "v_1.1.0_170701": "0",
     "v_1.2.0_170831": "1",
@@ -30,7 +30,8 @@
     "v_3.4.1_190624": "26",
     "v_3.4.2_190630": "27",
     "v_3.5.0_190713": "28",
-    "v_3.6.0_190721": "29"
+    "v_3.6.0_190721": "29",
+    "v_3.6.1_190728": "30"
   },
   "versionDetailList": [
     {
@@ -182,6 +183,11 @@
       "version": "v_3.6.0_190721",
       "title": "消息类型新增支持HTTP请求",
       "log": "● feature:消息类型新增支持HTTP请求\n● feature:成员导出支持选择文件类型\n● feature:支持外部AccessToken\n● feature:推送页签增加tps展示\n● optimization:消息编辑form重构\n● 其他细节调整\n"
+    },
+    {
+      "version": "v_3.6.1_190728",
+      "title": "HTTP请求类型消息使用OkHttp",
+      "log": "● feature:HTTP请求类型消息使用OkHttp引擎\n● optimization:HTTP请求支持选择body类型\n"
     }
   ]
 }
\ No newline at end of file

From 85739f99661781ac4e08f41c418c5f43dc3358c4 Mon Sep 17 00:00:00 2001
From: duoduo 
Date: Sun, 28 Jul 2019 21:56:10 +0800
Subject: [PATCH 14/14] =?UTF-8?q?update=EF=BC=9A=E6=9B=B4=E6=96=B0?=
 =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E5=9C=B0=E5=9D=80?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 download.md | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/download.md b/download.md
index fee76f3c..16de86df 100644
--- a/download.md
+++ b/download.md
@@ -3,6 +3,8 @@
 
Windows +[WePush-v3.6.1_190728-x64-Setup.exe](http://download.zhoubochina.com/exe/WePush-v3.6.1_190728-x64-Setup.exe) +[WePush-with-jre-v3.6.1_190728-x64-Setup.exe](http://download.zhoubochina.com/exe/WePush-with-jre-v3.6.1_190728-x64-Setup.exe) [WePush-v3.6.0_190721-x64-Setup.exe](http://download.zhoubochina.com/exe/WePush-v3.6.0_190721-x64-Setup.exe) [WePush-with-jre-v3.6.0_190721-x64-Setup.exe](http://download.zhoubochina.com/exe/WePush-with-jre-v3.6.0_190721-x64-Setup.exe) [WePush-v3.5.0_190713-x64-Setup.exe](http://download.zhoubochina.com/exe/WePush-v3.5.0_190713-x64-Setup.exe) @@ -63,6 +65,7 @@
Mac OS +[v_3.6.1_190728.app](http://download.zhoubochina.com/mac/3.6.1.zip) [v_3.6.0_190721.app](http://download.zhoubochina.com/mac/3.6.0.zip) [v_3.5.0_190713.app](http://download.zhoubochina.com/mac/3.5.0.zip) [v_3.4.1_190624.app](http://download.zhoubochina.com/mac/3.4.1.zip) @@ -101,6 +104,7 @@
Linux +[v3.6.1_190728](http://download.zhoubochina.com/linux/WePush-3.6.1.zip) [v3.6.0_190721](http://download.zhoubochina.com/linux/WePush-3.6.0.zip) [v3.5.0_190713](http://download.zhoubochina.com/linux/WePush-3.5.0.zip) [v3.4.2_190630](http://download.zhoubochina.com/linux/WePush-3.4.2.zip)