diff --git a/mywust-core/src/main/java/cn/linghang/mywust/core/service/auth/UndergraduateLogin.java b/mywust-core/src/main/java/cn/linghang/mywust/core/service/auth/UndergraduateLogin.java index 65f4eaf..bfefb1e 100644 --- a/mywust-core/src/main/java/cn/linghang/mywust/core/service/auth/UndergraduateLogin.java +++ b/mywust-core/src/main/java/cn/linghang/mywust/core/service/auth/UndergraduateLogin.java @@ -35,11 +35,17 @@ public class UndergraduateLogin { HttpResponse sessionResponse = requester.get(sessionRequest, requestOption); String cookies = sessionResponse.getCookies(); - if (checkCookies(cookies, requestOption)) { - log.warn("[mywust]: Cookie检查不通过:{}", cookies); + if (!roughCheckCookie(cookies)) { + log.error("[mywust]: Cookie粗查不通过:{}", cookies); throw new ApiException(ApiException.Code.UNKNOWN_EXCEPTION, "登录获取的Cookie无效"); } + // 检查Cookie是否真正可用,同时请求一次任意接口使后续接口能够正确响应 + // 拿到Cookie后调用的第一个接口会产生302/301跳转,需要再次调用才能正确响应 + if (!checkCookies(cookies, requestOption)) { + log.warn("[mywust]: Cookie检查不通过:{}", cookies); + } + return cookies; } @@ -92,7 +98,7 @@ public class UndergraduateLogin { } private boolean roughCheckCookie(String cookies) { - return cookies == null || !cookies.contains("JSESSIONID") || !cookies.contains("SERVERID"); + return cookies != null && cookies.contains("JSESSIONID") && cookies.contains("SERVERID"); } private static final int COOKIES_ERROR_RESPONSE_LENGTH = diff --git a/mywust-network/src/main/java/cn/linghang/mywust/network/RequestClientOption.java b/mywust-network/src/main/java/cn/linghang/mywust/network/RequestClientOption.java index 7affa4c..53b0706 100644 --- a/mywust-network/src/main/java/cn/linghang/mywust/network/RequestClientOption.java +++ b/mywust-network/src/main/java/cn/linghang/mywust/network/RequestClientOption.java @@ -4,7 +4,6 @@ import lombok.Builder; import lombok.Data; @Data -@Builder public class RequestClientOption { private Proxy proxy; private long timeout; @@ -67,4 +66,40 @@ public class RequestClientOption { @Override public void setFallowUrlRedirect(boolean fallowUrlRedirect) {} } + + public static RequestClientOptionBuilder builder() { + return new RequestClientOptionBuilder(); + } + + public static final class RequestClientOptionBuilder { + private final RequestClientOption requestClientOption; + + private RequestClientOptionBuilder() { + requestClientOption = new RequestClientOption(); + } + + public RequestClientOptionBuilder proxy(Proxy proxy) { + requestClientOption.setProxy(proxy); + return this; + } + + public RequestClientOptionBuilder timeout(long timeout) { + requestClientOption.setTimeout(timeout); + return this; + } + + public RequestClientOptionBuilder fallowUrlRedirect(boolean fallowUrlRedirect) { + requestClientOption.setFallowUrlRedirect(fallowUrlRedirect); + return this; + } + + public RequestClientOptionBuilder ignoreSSLError(boolean ignoreSSLError) { + requestClientOption.setIgnoreSSLError(ignoreSSLError); + return this; + } + + public RequestClientOption build() { + return requestClientOption; + } + } } diff --git a/mywust-network/src/main/java/cn/linghang/mywust/network/entitys/HttpRequest.java b/mywust-network/src/main/java/cn/linghang/mywust/network/entitys/HttpRequest.java index 1ff802a..fc78ef5 100644 --- a/mywust-network/src/main/java/cn/linghang/mywust/network/entitys/HttpRequest.java +++ b/mywust-network/src/main/java/cn/linghang/mywust/network/entitys/HttpRequest.java @@ -38,9 +38,13 @@ public class HttpRequest { public HttpRequest(URL url, Map headers, String cookies, byte[] data) { this.url = url; - this.headers = headers; this.cookies = cookies; this.data = data; + + this.headers = headers; + if (headers == null) { + this.headers = new HashMap<>(DEFAULT_HEADERS); + } } public HttpRequest addHeaders(Map headers) {