|
@@ -0,0 +1,252 @@
|
|
|
+package cn.fastfun.util;
|
|
|
+
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import okhttp3.*;
|
|
|
+import org.apache.commons.lang3.exception.ExceptionUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+import java.io.IOException;
|
|
|
+import java.util.Iterator;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.Objects;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author Answer.AI.L
|
|
|
+ * @date 2019-04-09
|
|
|
+ */
|
|
|
+@Slf4j
|
|
|
+@Component
|
|
|
+public class OkHttpCli {
|
|
|
+ private static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
|
|
|
+ private static final MediaType XML = MediaType.parse("application/xml; charset=utf-8");
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private OkHttpClient okHttpClient;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * get 请求
|
|
|
+ *
|
|
|
+ * @param url 请求url地址
|
|
|
+ * @return string
|
|
|
+ */
|
|
|
+ public String doGet(String url) {
|
|
|
+ return doGet(url, null, null);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * get 请求
|
|
|
+ *
|
|
|
+ * @param url 请求url地址
|
|
|
+ * @param params 请求参数 map
|
|
|
+ * @return string
|
|
|
+ */
|
|
|
+ public String doGet(String url, Map<String, String> params) {
|
|
|
+ return doGet(url, params, null);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * get 请求
|
|
|
+ *
|
|
|
+ * @param url 请求url地址
|
|
|
+ * @param headers 请求头字段 {k1, v1 k2, v2, ...}
|
|
|
+ * @return string
|
|
|
+ */
|
|
|
+ public String doGet(String url, String[] headers) {
|
|
|
+ return doGet(url, null, headers);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * get 请求
|
|
|
+ *
|
|
|
+ * @param url 请求url地址
|
|
|
+ * @param params 请求参数 map
|
|
|
+ * @param headers 请求头字段 {k1, v1 k2, v2, ...}
|
|
|
+ * @return string
|
|
|
+ */
|
|
|
+ public String doGet(String url, Map<String, String> params, String[] headers) {
|
|
|
+ StringBuilder sb = new StringBuilder(url);
|
|
|
+ if (params != null && params.keySet().size() > 0) {
|
|
|
+ boolean firstFlag = true;
|
|
|
+ for (String key : params.keySet()) {
|
|
|
+ if (firstFlag) {
|
|
|
+ sb.append("?").append(key).append("=").append(params.get(key));
|
|
|
+ firstFlag = false;
|
|
|
+ } else {
|
|
|
+ sb.append("&").append(key).append("=").append(params.get(key));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Request.Builder builder = new Request.Builder();
|
|
|
+ if (headers != null && headers.length > 0) {
|
|
|
+ if (headers.length % 2 == 0) {
|
|
|
+ for (int i = 0; i < headers.length; i = i + 2) {
|
|
|
+ builder.addHeader(headers[i], headers[i + 1]);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ log.warn("headers's length[{}] is error.", headers.length);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Request request = builder.url(sb.toString()).build();
|
|
|
+ log.info("do get request and url[{}]", sb.toString());
|
|
|
+ return execute(request);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * post 请求
|
|
|
+ *
|
|
|
+ * @param url 请求url地址
|
|
|
+ * @param params 请求参数 map
|
|
|
+ * @return string
|
|
|
+ */
|
|
|
+ public String doPost(String url, Map<String, String> params) {
|
|
|
+ FormBody.Builder builder = new FormBody.Builder();
|
|
|
+ if (params != null && params.keySet().size() > 0) {
|
|
|
+ for (String key : params.keySet()) {
|
|
|
+ builder.add(key, params.get(key));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Request request = new Request.Builder().url(url).post(builder.build()).build();
|
|
|
+ log.info("do post request and url[{}]", url);
|
|
|
+ return execute(request);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * post 请求, 请求数据为 json 的字符串
|
|
|
+ *
|
|
|
+ * @param url 请求url地址
|
|
|
+ * @param json 请求数据, json 字符串
|
|
|
+ * @return string
|
|
|
+ */
|
|
|
+ public String doPostJson(String url, String json) {
|
|
|
+ log.info("do post request and url[{}]", url);
|
|
|
+ return executePost(url, json, JSON);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * post 请求, 请求数据为 json 的字符串
|
|
|
+ *
|
|
|
+ * @param url 请求url地址
|
|
|
+ * @param json 请求数据, json 字符串
|
|
|
+ * @return string
|
|
|
+ */
|
|
|
+ public String doPostTokenJson(String url, String json, Map<String,String> mapHeaders) {
|
|
|
+ log.info("do post request and url[{}]", url);
|
|
|
+ return executeTokenPost(url, json, JSON, mapHeaders);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * post 请求, 请求数据为 xml 的字符串
|
|
|
+ *
|
|
|
+ * @param url 请求url地址
|
|
|
+ * @param xml 请求数据, xml 字符串
|
|
|
+ * @return string
|
|
|
+ */
|
|
|
+ public String doPostXml(String url, String xml) {
|
|
|
+ log.info("do post request and url[{}]", url);
|
|
|
+ return executePost(url, xml, XML);
|
|
|
+ }
|
|
|
+
|
|
|
+ private String executePost(String url, String data, MediaType contentType) {
|
|
|
+ RequestBody requestBody = RequestBody.create(contentType,data);
|
|
|
+ Request request = new Request.Builder()
|
|
|
+ .url(url)
|
|
|
+ .post(requestBody)
|
|
|
+ .build();
|
|
|
+ return execute(request);
|
|
|
+ }
|
|
|
+
|
|
|
+ private String executeTokenPost(String url, String data, MediaType contentType,Map<String,String> mapHeaders) {
|
|
|
+ RequestBody requestBody = RequestBody.create(contentType, data);
|
|
|
+ Headers headers = setHeaders(mapHeaders);
|
|
|
+
|
|
|
+ Request request = new Request.Builder()
|
|
|
+ .url(url)
|
|
|
+ .headers(headers)
|
|
|
+ .post(requestBody)
|
|
|
+ .build();
|
|
|
+ return execute(request);
|
|
|
+ }
|
|
|
+ public String executeCookiePost(String url, String data, MediaType contentType,Map<String,String> map) {
|
|
|
+ RequestBody requestBody = RequestBody.create(contentType, data);
|
|
|
+ Headers headers = setHeaders(map);
|
|
|
+ Request request = new Request.Builder()
|
|
|
+ .url(url)
|
|
|
+ .headers(headers)
|
|
|
+ .post(requestBody)
|
|
|
+ .header("Cookie", map.get("Cookie"))
|
|
|
+ .build();
|
|
|
+ return executeCookie(request);
|
|
|
+ }
|
|
|
+
|
|
|
+ private String execute(Request request) {
|
|
|
+ Response response = null;
|
|
|
+ String result = null;
|
|
|
+ try {
|
|
|
+ response = okHttpClient.newCall(request).execute();
|
|
|
+ if (response.isSuccessful()) {
|
|
|
+ result = response.body().string();
|
|
|
+ }else{
|
|
|
+ result = String.format("调用失败:{}",response.body().string());
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error(ExceptionUtils.getStackTrace(e));
|
|
|
+ } finally {
|
|
|
+ if (response != null) {
|
|
|
+ response.close();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ private String executeCookie(Request request) {
|
|
|
+ /**/Response response = null;
|
|
|
+ try {
|
|
|
+ response = okHttpClient.newCall(request).execute();
|
|
|
+ if (response.isSuccessful()) {
|
|
|
+ String result = Objects.requireNonNull(response.body()).string();
|
|
|
+ System.out.println(result);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error(ExceptionUtils.getStackTrace(e));
|
|
|
+ } finally {
|
|
|
+ if (response != null) {
|
|
|
+ response.close();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //、把请求对象传递给Call,创建call网络请求
|
|
|
+ /*Call call = okHttpClient.newCall(request);
|
|
|
+ call.enqueue(new Callback() {
|
|
|
+ @Override
|
|
|
+ public void onFailure(Call call, IOException e) {
|
|
|
+ log.error(ExceptionUtils.getStackTrace(e));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onResponse(Call call, Response response) throws IOException {
|
|
|
+ String string = Objects.requireNonNull(response.body()).string();
|
|
|
+ System.out.println(string);
|
|
|
+ }
|
|
|
+ });*/
|
|
|
+
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+
|
|
|
+ private static Headers setHeaders(Map<String, String> headersParams) {
|
|
|
+ Headers headers = null;
|
|
|
+ okhttp3.Headers.Builder headersbuilder = new okhttp3.Headers.Builder();
|
|
|
+ if (EmptyUtils.isNotEmpty(headersParams)) {
|
|
|
+ Iterator<String> iterator = headersParams.keySet().iterator();
|
|
|
+ String key = "";
|
|
|
+ while (iterator.hasNext()) {
|
|
|
+ key = iterator.next();
|
|
|
+ headersbuilder.add(key, headersParams.get(key));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ headers = headersbuilder.build();
|
|
|
+ return headers;
|
|
|
+ }
|
|
|
+}
|