From 74f3ef200080f91428879663701faf2ad3fc0a4a Mon Sep 17 00:00:00 2001 From: tanghc Date: Wed, 24 Jul 2019 16:31:56 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/gitee/sop/sdk/client/OpenHttp.java | 93 ++++++++++++++++--- .../com/gitee/sop/sdk/client/OpenRequest.java | 4 +- 2 files changed, 85 insertions(+), 12 deletions(-) diff --git a/sop-sdk/sdk-java/src/main/java/com/gitee/sop/sdk/client/OpenHttp.java b/sop-sdk/sdk-java/src/main/java/com/gitee/sop/sdk/client/OpenHttp.java index 64dc253d..76250bc0 100644 --- a/sop-sdk/sdk-java/src/main/java/com/gitee/sop/sdk/client/OpenHttp.java +++ b/sop-sdk/sdk-java/src/main/java/com/gitee/sop/sdk/client/OpenHttp.java @@ -6,6 +6,7 @@ import okhttp3.Cookie; import okhttp3.CookieJar; import okhttp3.FormBody; import okhttp3.HttpUrl; +import okhttp3.MediaType; import okhttp3.MultipartBody; import okhttp3.OkHttpClient; import okhttp3.Request; @@ -22,13 +23,21 @@ import java.util.Set; import java.util.concurrent.TimeUnit; /** + * HTTP请求工具 + * * @author tanghc */ public class OpenHttp { + private static final MediaType MEDIA_TYPE_JSON = MediaType.parse("application/json; charset=utf-8"); + private Map> cookieStore = new HashMap>(); private OkHttpClient httpClient; + public OpenHttp() { + this(new OpenConfig()); + } + public OpenHttp(OpenConfig openConfig) { this.initHttpClient(openConfig); } @@ -68,25 +77,45 @@ public class OpenHttp { return response.body().string(); } + /** + * 请求json数据,contentType=application/json + * @param url 请求路径 + * @param json json数据 + * @param header header + * @return 返回响应结果 + * @throws IOException + */ + public String requestJson(String url, String json, Map header) throws IOException { + RequestBody body = RequestBody.create(MEDIA_TYPE_JSON, json); + Request.Builder requestBuilder = new Request.Builder() + .url(url) + .post(body); + // 添加header + addHeader(requestBuilder, header); + + Request request = requestBuilder.build(); + Response response = httpClient + .newCall(request) + .execute(); + try { + return response.body().string(); + } finally { + response.close(); + } + } + /** * 提交表单 * - * @param url url - * @param form 参数 + * @param url url + * @param form 参数 * @param header header * @param method 请求方式,post,get等 * @return * @throws IOException */ - public String requestFormBody(String url, Map form, Map header, String method) throws IOException { - FormBody.Builder paramBuilder = new FormBody.Builder(StandardCharsets.UTF_8); - for (Map.Entry entry : form.entrySet()) { - paramBuilder.add(entry.getKey(), entry.getValue()); - } - FormBody formBody = paramBuilder.build(); - Request.Builder requestBuilder = new Request.Builder() - .url(url) - .method(method, formBody); + public String request(String url, Map form, Map header, String method) throws IOException { + Request.Builder requestBuilder = buildRequestBuilder(url, form, method); // 添加header addHeader(requestBuilder, header); @@ -101,6 +130,47 @@ public class OpenHttp { } } + public static Request.Builder buildRequestBuilder(String url, Map form, String method) { + switch (method) { + case "get": + return new Request.Builder() + .url(buildHttpUrl(url, form)) + .get(); + case "head": + return new Request.Builder() + .url(buildHttpUrl(url, form)) + .head(); + case "put": + return new Request.Builder() + .url(url) + .put(buildFormBody(form)); + case "delete": + return new Request.Builder() + .url(url) + .delete(buildFormBody(form)); + default: + return new Request.Builder() + .url(url) + .post(buildFormBody(form)); + } + } + + public static HttpUrl buildHttpUrl(String url, Map form) { + HttpUrl.Builder urlBuilder = HttpUrl.parse(url).newBuilder(); + for (Map.Entry entry : form.entrySet()) { + urlBuilder.addQueryParameter(entry.getKey(), entry.getValue()); + } + return urlBuilder.build(); + } + + public static FormBody buildFormBody(Map form) { + FormBody.Builder paramBuilder = new FormBody.Builder(StandardCharsets.UTF_8); + for (Map.Entry entry : form.entrySet()) { + paramBuilder.add(entry.getKey(), entry.getValue()); + } + return paramBuilder.build(); + } + /** * 提交表单,并且上传文件 * @@ -162,4 +232,5 @@ public class OpenHttp { this.httpClient = httpClient; } + } diff --git a/sop-sdk/sdk-java/src/main/java/com/gitee/sop/sdk/client/OpenRequest.java b/sop-sdk/sdk-java/src/main/java/com/gitee/sop/sdk/client/OpenRequest.java index 3327e2c6..959c3624 100644 --- a/sop-sdk/sdk-java/src/main/java/com/gitee/sop/sdk/client/OpenRequest.java +++ b/sop-sdk/sdk-java/src/main/java/com/gitee/sop/sdk/client/OpenRequest.java @@ -42,7 +42,9 @@ public class OpenRequest { } return openHttp.get(url, header); } else { - return openHttp.requestFormBody(url, form, header, requestMethod.name()); + return openHttp.request(url, form, header, requestMethod.name()); + // 下面这种方式也可以,以application/json方式请求 + // return openHttp.requestJson(url, JSON.toJSONString(form), header); } } } catch (IOException e) {