package cn.x.request;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import okhttp3.Call;
import okhttp3.Cookie;
import okhttp3.CookieJar;
import okhttp3.HttpUrl;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
@Data
public abstract class BaseRequest {
String url;
String requestMethod;
OkHttpClient okHttpClient ;
RequestBody body ;
Request request;
Call call;
Response response;
public BaseRequest() {
final HashMap<String, List<Cookie>> cookieStore = new HashMap<>();
this.okHttpClient = new OkHttpClient.Builder()
.cookieJar(new CookieJar() {
@Override
public void saveFromResponse(HttpUrl httpUrl, List<Cookie> list) {
cookieStore.put(httpUrl.host(), list);
}
@Override
public List<Cookie> loadForRequest(HttpUrl httpUrl) {
List<Cookie> cookies = cookieStore.get(httpUrl.host());
return cookies != null ? cookies : new ArrayList<Cookie>();
}
})
.build();
}
public abstract void prepareRequest() throws Throwable;
public abstract Response excuteRequest() throws Throwable;
}
package cn.x.request;
import java.util.List;
import cn.x.common.AppHeader;
import okhttp3.Cookie;
import okhttp3.HttpUrl;
import okhttp3.MediaType;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
public class JsonRequest extends BaseRequest {
String jsonString;
String accessToken;
public JsonRequest(String url ,String jsonString) {
super();
this.url = url;
this.jsonString = jsonString;
}
@Override
public void prepareRequest() throws Throwable {
MediaType JSON = MediaType.parse("application/json; charset=utf-8");
AppHeader appHeader = new AppHeader(jsonString);
body = RequestBody.create(JSON, jsonString);
request = new Request.Builder()
.url(url)
.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36")
.addHeader("SIGN",appHeader.getSign())
.addHeader("T",appHeader.getTimespan())
.post(body)
.build();
if( null != accessToken) {
List<Cookie> cookieList = okHttpClient.cookieJar().loadForRequest(HttpUrl.get(url));
Cookie cookie = new Cookie.Builder().name("accessToken").value(accessToken).domain(HttpUrl.get(url).host()).build();
cookieList.add(cookie);
okHttpClient.cookieJar().saveFromResponse(HttpUrl.get(url), cookieList);
}
}
@Override
public Response excuteRequest() throws Throwable {
System.out.println();
if(request.header("Authorization") != null) {
System.out.println("Authorization: " + request.header("Authorization"));
}
System.out.println("url:" + url);
System.out.println("request:" + jsonString);
call = okHttpClient.newCall(request);
response = call.execute();
System.out.println("response:" + response.toString());
return response;
}
public String getJsonString() {
return jsonString;
}
public void setJsonString(String jsonString) {
this.jsonString = jsonString;
}
public String getAccessToken() {
return accessToken;
}
public void setAccessToken(String accessToken) {
this.accessToken = accessToken;
}
}