提交 384f7265 编写于 作者: 如梦技术's avatar 如梦技术 🐛

Merge branch 'mica-v2.4.x'

......@@ -18,6 +18,7 @@ package net.dreamlu.mica.http;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Request;
import okhttp3.Response;
import javax.annotation.ParametersAreNonnullByDefault;
......@@ -38,7 +39,8 @@ public class AsyncCallback implements Callback {
@Override
public void onFailure(Call call, IOException e) {
exchange.onFailure(call.request(), e);
Request request = call.request();
exchange.onFailure(request, new HttpException(request, e));
}
@Override
......@@ -48,7 +50,7 @@ public class AsyncCallback implements Callback {
if (response.isSuccessful()) {
exchange.onSuccessful(httpResponse);
} else {
exchange.onFailure(call.request(), new IOException(httpResponse.message()));
exchange.onFailure(call.request(), new HttpException(httpResponse));
}
}
}
......
......@@ -30,11 +30,11 @@ import java.util.function.Consumer;
*/
public class AsyncExchange {
private final static Consumer<ResponseSpec> DEFAULT_CONSUMER = (r) -> {};
private final static BiConsumer<Request, IOException> DEFAULT_FAIL_CONSUMER = (r, e) -> {};
private final static BiConsumer<Request, HttpException> DEFAULT_FAIL_CONSUMER = (r, e) -> {};
private final Call call;
private Consumer<ResponseSpec> successConsumer;
private Consumer<ResponseSpec> responseConsumer;
private BiConsumer<Request, IOException> failedBiConsumer;
private BiConsumer<Request, HttpException> failedBiConsumer;
AsyncExchange(Call call) {
this.call = call;
......@@ -53,7 +53,7 @@ public class AsyncExchange {
this.execute();
}
public AsyncExchange onFailed(BiConsumer<Request, IOException> biConsumer) {
public AsyncExchange onFailed(BiConsumer<Request, HttpException> biConsumer) {
this.failedBiConsumer = biConsumer;
return this;
}
......@@ -70,7 +70,7 @@ public class AsyncExchange {
successConsumer.accept(httpResponse);
}
protected void onFailure(Request request, IOException e) {
protected void onFailure(Request request, HttpException e) {
failedBiConsumer.accept(request, e);
}
......
......@@ -43,11 +43,11 @@ import java.util.function.Function;
*/
@RequiredArgsConstructor
public class Exchange {
private BiConsumer<Request, IOException> failedBiConsumer = (r, e) -> {
private BiConsumer<Request, HttpException> failedBiConsumer = (r, e) -> {
};
private final Call call;
public Exchange onFailed(BiConsumer<Request, IOException> failConsumer) {
public Exchange onFailed(BiConsumer<Request, HttpException> failConsumer) {
this.failedBiConsumer = failConsumer;
return this;
}
......@@ -65,7 +65,8 @@ public class Exchange {
try (HttpResponse response = new HttpResponse(call.execute())) {
return func.apply(response);
} catch (IOException e) {
failedBiConsumer.accept(call.request(), e);
Request request = call.request();
failedBiConsumer.accept(request, new HttpException(request, e));
return null;
}
}
......@@ -76,10 +77,11 @@ public class Exchange {
if (response.isOk()) {
return func.apply(response);
} else {
failedBiConsumer.accept(call.request(), new IOException(response.toString()));
failedBiConsumer.accept(call.request(), new HttpException(response));
}
} catch (IOException e) {
failedBiConsumer.accept(call.request(), e);
Request request = call.request();
failedBiConsumer.accept(request, new HttpException(request, e));
}
return null;
}
......@@ -96,7 +98,7 @@ public class Exchange {
* Returns ok http response.
*
* <p>
* 注意:body 不能读取,因为已经关闭掉了,建议还是直接用 onResponse 函数处理。
* 注意:body 不能读取,因为已经关闭掉了,建议还是直接用 onResponse 函数处理。
* </p>
*
* @return Response
......
/*
* Copyright (c) 2019-2029, Dreamlu (596392912@qq.com & www.dreamlu.net).
* <p>
* Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.gnu.org/licenses/lgpl.html
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.dreamlu.mica.http;
import okhttp3.Protocol;
import okhttp3.Request;
import okhttp3.Response;
import javax.annotation.ParametersAreNonnullByDefault;
import java.io.IOException;
/**
* HttpException
*
* @author L.cm
*/
@ParametersAreNonnullByDefault
public class HttpException extends IOException {
private final ResponseSpec response;
HttpException(ResponseSpec response) {
super(response.toString());
this.response = response;
}
HttpException(Request request, Throwable cause) {
super(cause);
this.response = getResponse(request, cause.getMessage());
}
public ResponseSpec getResponse() {
return response;
}
@Override
public Throwable fillInStackTrace() {
Throwable cause = super.getCause();
if (cause == null) {
return super.fillInStackTrace();
} else {
return cause.fillInStackTrace();
}
}
/**
* 构造 HttpResponse
*
* @param request Request
* @param message message
* @return HttpResponse
*/
private static HttpResponse getResponse(Request request, String message) {
Response response = new Response.Builder()
.request(request)
.protocol(Protocol.HTTP_1_1)
.message(message)
.code(500)
.build();
return new HttpResponse(response);
}
}
package net.dreamlu;
import net.dreamlu.mica.http.HttpRequest;
import net.dreamlu.mica.http.LogLevel;
import net.dreamlu.mica.http.ResponseSpec;
public class HttpTest {
public static void main(String[] args) {
String html = HttpRequest.get("https://wwww.baiduxxx.com/123123")
.useSlf4jLog(LogLevel.NONE)
.execute()
.onFailed((request, e) -> {
e.printStackTrace();
ResponseSpec response = e.getResponse();
System.out.println(response.asString());
})
.onSuccessful(ResponseSpec::asString);
System.out.println(html);
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册