Add OkHttp example
This commit is contained in:
parent
8692cad328
commit
453b739f6c
|
@ -15,7 +15,7 @@
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
|
||||||
<!-- Spring Boot Dependencies -->
|
<!-- Spring Boot Dependencies -->
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot-starter-thymeleaf</artifactId>
|
<artifactId>spring-boot-starter-thymeleaf</artifactId>
|
||||||
|
@ -71,7 +71,7 @@
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
<artifactId>jackson-databind</artifactId>
|
<artifactId>jackson-databind</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.fasterxml.jackson.dataformat</groupId>
|
<groupId>com.fasterxml.jackson.dataformat</groupId>
|
||||||
<artifactId>jackson-dataformat-xml</artifactId>
|
<artifactId>jackson-dataformat-xml</artifactId>
|
||||||
|
@ -118,6 +118,14 @@
|
||||||
<artifactId>log4j-over-slf4j</artifactId>
|
<artifactId>log4j-over-slf4j</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- okhttp -->
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.squareup.okhttp3</groupId>
|
||||||
|
<artifactId>okhttp</artifactId>
|
||||||
|
<version>${com.squareup.okhttp3.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<!-- test scoped -->
|
<!-- test scoped -->
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
|
@ -153,14 +161,14 @@
|
||||||
<artifactId>rest-assured</artifactId>
|
<artifactId>rest-assured</artifactId>
|
||||||
<version>${rest-assured.version}</version>
|
<version>${rest-assured.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- -->
|
<!-- -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.google.protobuf</groupId>
|
<groupId>com.google.protobuf</groupId>
|
||||||
<artifactId>protobuf-java</artifactId>
|
<artifactId>protobuf-java</artifactId>
|
||||||
<version>2.6.1</version>
|
<version>2.6.1</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.esotericsoftware</groupId>
|
<groupId>com.esotericsoftware</groupId>
|
||||||
<artifactId>kryo</artifactId>
|
<artifactId>kryo</artifactId>
|
||||||
|
@ -198,7 +206,7 @@
|
||||||
<artifactId>maven-surefire-plugin</artifactId>
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
<configuration>
|
<configuration>
|
||||||
<excludes>
|
<excludes>
|
||||||
<exclude>**/*LiveTest.java</exclude>
|
<exclude>**/*LiveTest.java</exclude>
|
||||||
</excludes>
|
</excludes>
|
||||||
<systemPropertyVariables>
|
<systemPropertyVariables>
|
||||||
<!-- <provPersistenceTarget>h2</provPersistenceTarget> -->
|
<!-- <provPersistenceTarget>h2</provPersistenceTarget> -->
|
||||||
|
@ -285,7 +293,7 @@
|
||||||
</build>
|
</build>
|
||||||
</profile>
|
</profile>
|
||||||
</profiles>
|
</profiles>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<!-- Spring -->
|
<!-- Spring -->
|
||||||
|
|
||||||
|
@ -320,6 +328,9 @@
|
||||||
<maven-surefire-plugin.version>2.19.1</maven-surefire-plugin.version>
|
<maven-surefire-plugin.version>2.19.1</maven-surefire-plugin.version>
|
||||||
<cargo-maven2-plugin.version>1.6.0</cargo-maven2-plugin.version>
|
<cargo-maven2-plugin.version>1.6.0</cargo-maven2-plugin.version>
|
||||||
|
|
||||||
|
<!-- okhttp -->
|
||||||
|
<com.squareup.okhttp3.version>3.4.1</com.squareup.okhttp3.version>
|
||||||
|
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
package org.baeldung.okhttp;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import okhttp3.Interceptor;
|
||||||
|
import okhttp3.Request;
|
||||||
|
import okhttp3.Response;
|
||||||
|
|
||||||
|
public class DefaultContentTypeInterceptor implements Interceptor {
|
||||||
|
|
||||||
|
private final String contentType;
|
||||||
|
|
||||||
|
public DefaultContentTypeInterceptor(String contentType) {
|
||||||
|
this.contentType = contentType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Response intercept(Interceptor.Chain chain) throws IOException {
|
||||||
|
|
||||||
|
Request originalRequest = chain.request();
|
||||||
|
Request requestWithUserAgent = originalRequest.newBuilder()
|
||||||
|
.header("Content-Type", contentType)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
return chain.proceed(requestWithUserAgent);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,81 @@
|
||||||
|
package org.baeldung.okhttp;
|
||||||
|
|
||||||
|
import static org.hamcrest.Matchers.equalTo;
|
||||||
|
import static org.junit.Assert.assertFalse;
|
||||||
|
import static org.junit.Assert.assertThat;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.baeldung.okhttp.ProgressRequestWrapper;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import okhttp3.Call;
|
||||||
|
import okhttp3.MediaType;
|
||||||
|
import okhttp3.MultipartBody;
|
||||||
|
import okhttp3.OkHttpClient;
|
||||||
|
import okhttp3.Request;
|
||||||
|
import okhttp3.RequestBody;
|
||||||
|
import okhttp3.Response;
|
||||||
|
|
||||||
|
public class OkHttpFileUploadingTest {
|
||||||
|
|
||||||
|
private static final String BASE_URL = "http://localhost:8080/spring-rest";
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenUploadFile_thenCorrect() throws IOException {
|
||||||
|
|
||||||
|
OkHttpClient client = new OkHttpClient();
|
||||||
|
|
||||||
|
RequestBody requestBody = new MultipartBody.Builder()
|
||||||
|
.setType(MultipartBody.FORM)
|
||||||
|
.addFormDataPart("file", "file.txt",
|
||||||
|
RequestBody.create(MediaType.parse("application/octet-stream"), new File("src/test/resources/test.txt")))
|
||||||
|
.build();
|
||||||
|
|
||||||
|
Request request = new Request.Builder()
|
||||||
|
.url(BASE_URL + "/users/upload")
|
||||||
|
.post(requestBody)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
Call call = client.newCall(request);
|
||||||
|
Response response = call.execute();
|
||||||
|
|
||||||
|
assertThat(response.code(), equalTo(200));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenGetUploadFileProgress_thenCorrect() throws IOException {
|
||||||
|
|
||||||
|
OkHttpClient client = new OkHttpClient();
|
||||||
|
|
||||||
|
RequestBody requestBody = new MultipartBody.Builder()
|
||||||
|
.setType(MultipartBody.FORM)
|
||||||
|
.addFormDataPart("file", "file.txt",
|
||||||
|
RequestBody.create(MediaType.parse("application/octet-stream"), new File("src/test/resources/test.txt")))
|
||||||
|
.build();
|
||||||
|
|
||||||
|
|
||||||
|
ProgressRequestWrapper.ProgressListener listener = new ProgressRequestWrapper.ProgressListener() {
|
||||||
|
|
||||||
|
public void onRequestProgress(long bytesWritten, long contentLength) {
|
||||||
|
|
||||||
|
float percentage = 100f * bytesWritten / contentLength;
|
||||||
|
assertFalse(Float.compare(percentage, 100) > 0);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
ProgressRequestWrapper countingBody = new ProgressRequestWrapper(requestBody, listener);
|
||||||
|
|
||||||
|
Request request = new Request.Builder()
|
||||||
|
.url(BASE_URL + "/users/upload")
|
||||||
|
.post(countingBody)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
Call call = client.newCall(request);
|
||||||
|
Response response = call.execute();
|
||||||
|
|
||||||
|
assertThat(response.code(), equalTo(200));
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,78 @@
|
||||||
|
package org.baeldung.okhttp;
|
||||||
|
|
||||||
|
import static org.hamcrest.Matchers.equalTo;
|
||||||
|
import static org.junit.Assert.assertThat;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import okhttp3.Call;
|
||||||
|
import okhttp3.Callback;
|
||||||
|
import okhttp3.HttpUrl;
|
||||||
|
import okhttp3.OkHttpClient;
|
||||||
|
import okhttp3.Request;
|
||||||
|
import okhttp3.Response;
|
||||||
|
|
||||||
|
public class OkHttpGetTest {
|
||||||
|
|
||||||
|
private static final String BASE_URL = "http://localhost:8080/spring-rest";
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenGetRequest_thenCorrect() throws IOException {
|
||||||
|
|
||||||
|
OkHttpClient client = new OkHttpClient();
|
||||||
|
|
||||||
|
Request request = new Request.Builder()
|
||||||
|
.url(BASE_URL + "/date")
|
||||||
|
.build();
|
||||||
|
|
||||||
|
Call call = client.newCall(request);
|
||||||
|
Response response = call.execute();
|
||||||
|
|
||||||
|
assertThat(response.code(), equalTo(200));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenGetRequestWithQueryParameter_thenCorrect() throws IOException {
|
||||||
|
|
||||||
|
OkHttpClient client = new OkHttpClient();
|
||||||
|
|
||||||
|
HttpUrl.Builder urlBuilder = HttpUrl.parse(BASE_URL + "/ex/bars").newBuilder();
|
||||||
|
urlBuilder.addQueryParameter("id", "1");
|
||||||
|
|
||||||
|
String url = urlBuilder.build().toString();
|
||||||
|
|
||||||
|
Request request = new Request.Builder()
|
||||||
|
.url(url)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
Call call = client.newCall(request);
|
||||||
|
Response response = call.execute();
|
||||||
|
|
||||||
|
assertThat(response.code(), equalTo(200));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenAsynchronousGetRequest_thenCorrect() {
|
||||||
|
|
||||||
|
OkHttpClient client = new OkHttpClient();
|
||||||
|
|
||||||
|
Request request = new Request.Builder()
|
||||||
|
.url(BASE_URL + "/date")
|
||||||
|
.build();
|
||||||
|
|
||||||
|
Call call = client.newCall(request);
|
||||||
|
|
||||||
|
call.enqueue(new Callback() {
|
||||||
|
|
||||||
|
public void onResponse(Call call, Response response) throws IOException {
|
||||||
|
assertThat(response.code(), equalTo(200));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onFailure(Call call, IOException e) {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,48 @@
|
||||||
|
package org.baeldung.okhttp;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import okhttp3.Call;
|
||||||
|
import okhttp3.OkHttpClient;
|
||||||
|
import okhttp3.Request;
|
||||||
|
import okhttp3.Response;
|
||||||
|
|
||||||
|
public class OkHttpHeaderTest {
|
||||||
|
|
||||||
|
private static final String SAMPLE_URL = "http://www.github.com";
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenSetHeader_thenCorrect() throws IOException {
|
||||||
|
|
||||||
|
OkHttpClient client = new OkHttpClient();
|
||||||
|
|
||||||
|
Request request = new Request.Builder()
|
||||||
|
.url(SAMPLE_URL)
|
||||||
|
.addHeader("Content-Type", "application/json")
|
||||||
|
.build();
|
||||||
|
|
||||||
|
Call call = client.newCall(request);
|
||||||
|
Response response = call.execute();
|
||||||
|
response.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenSetDefaultHeader_thenCorrect() throws IOException {
|
||||||
|
|
||||||
|
OkHttpClient client = new OkHttpClient.Builder()
|
||||||
|
.addInterceptor(new DefaultContentTypeInterceptor("application/json"))
|
||||||
|
.build();
|
||||||
|
|
||||||
|
Request request = new Request.Builder()
|
||||||
|
.url(SAMPLE_URL)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
Call call = client.newCall(request);
|
||||||
|
Response response = call.execute();
|
||||||
|
response.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,107 @@
|
||||||
|
package org.baeldung.okhttp;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.concurrent.Executors;
|
||||||
|
import java.util.concurrent.ScheduledExecutorService;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import okhttp3.Cache;
|
||||||
|
import okhttp3.Call;
|
||||||
|
import okhttp3.OkHttpClient;
|
||||||
|
import okhttp3.Request;
|
||||||
|
import okhttp3.Response;
|
||||||
|
|
||||||
|
public class OkHttpMiscTest {
|
||||||
|
|
||||||
|
private static final String BASE_URL = "http://localhost:8080/spring-rest";
|
||||||
|
private static Logger logger = LoggerFactory.getLogger(OkHttpMiscTest.class);
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenSetRequestTimeout_thenFail() throws IOException {
|
||||||
|
|
||||||
|
OkHttpClient client = new OkHttpClient.Builder()
|
||||||
|
.readTimeout(1, TimeUnit.SECONDS)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
Request request = new Request.Builder()
|
||||||
|
.url(BASE_URL + "/delay/2") // This URL is served with a 2 second delay.
|
||||||
|
.build();
|
||||||
|
|
||||||
|
Call call = client.newCall(request);
|
||||||
|
Response response = call.execute();
|
||||||
|
response.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenCancelRequest_thenCorrect() throws IOException {
|
||||||
|
|
||||||
|
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
|
||||||
|
|
||||||
|
OkHttpClient client = new OkHttpClient();
|
||||||
|
|
||||||
|
Request request = new Request.Builder()
|
||||||
|
.url(BASE_URL + "/delay/2") // This URL is served with a 2 second delay.
|
||||||
|
.build();
|
||||||
|
|
||||||
|
final int seconds = 1;
|
||||||
|
|
||||||
|
final long startNanos = System.nanoTime();
|
||||||
|
final Call call = client.newCall(request);
|
||||||
|
|
||||||
|
// Schedule a job to cancel the call in 1 second.
|
||||||
|
executor.schedule(new Runnable() {
|
||||||
|
public void run() {
|
||||||
|
|
||||||
|
logger.debug("Canceling call: " + (System.nanoTime() - startNanos) / 1e9f);
|
||||||
|
call.cancel();
|
||||||
|
logger.debug("Canceled call: " + (System.nanoTime() - startNanos) / 1e9f);
|
||||||
|
}
|
||||||
|
}, seconds, TimeUnit.SECONDS);
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
logger.debug("Executing call: " + (System.nanoTime() - startNanos) / 1e9f);
|
||||||
|
Response response = call.execute();
|
||||||
|
logger.debug("Call was expected to fail, but completed: " + (System.nanoTime() - startNanos) / 1e9f, response);
|
||||||
|
|
||||||
|
} catch (IOException e) {
|
||||||
|
|
||||||
|
logger.debug("Call failed as expected: " + (System.nanoTime() - startNanos) / 1e9f, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenSetResponseCache_thenCorrect() throws IOException {
|
||||||
|
|
||||||
|
int cacheSize = 10 * 1024 * 1024; // 10 MiB
|
||||||
|
File cacheDirectory = new File("src/test/resources/cache");
|
||||||
|
Cache cache = new Cache(cacheDirectory, cacheSize);
|
||||||
|
|
||||||
|
OkHttpClient client = new OkHttpClient.Builder()
|
||||||
|
.cache(cache)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
Request request = new Request.Builder()
|
||||||
|
.url("http://publicobject.com/helloworld.txt")
|
||||||
|
.build();
|
||||||
|
|
||||||
|
Response response1 = client.newCall(request).execute();
|
||||||
|
logResponse(response1);
|
||||||
|
|
||||||
|
Response response2 = client.newCall(request).execute();
|
||||||
|
logResponse(response2);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void logResponse(Response response) throws IOException {
|
||||||
|
|
||||||
|
logger.debug("Response response: " + response);
|
||||||
|
logger.debug("Response cache response: " + response.cacheResponse());
|
||||||
|
logger.debug("Response network response: " + response.networkResponse());
|
||||||
|
logger.debug("Response responseBody: " + response.body().string());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,109 @@
|
||||||
|
package org.baeldung.okhttp;
|
||||||
|
|
||||||
|
import static org.hamcrest.Matchers.equalTo;
|
||||||
|
import static org.junit.Assert.assertThat;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import okhttp3.Call;
|
||||||
|
import okhttp3.Credentials;
|
||||||
|
import okhttp3.FormBody;
|
||||||
|
import okhttp3.MediaType;
|
||||||
|
import okhttp3.MultipartBody;
|
||||||
|
import okhttp3.OkHttpClient;
|
||||||
|
import okhttp3.Request;
|
||||||
|
import okhttp3.RequestBody;
|
||||||
|
import okhttp3.Response;
|
||||||
|
|
||||||
|
public class OkHttpPostingTest {
|
||||||
|
|
||||||
|
private static final String BASE_URL = "http://localhost:8080/spring-rest";
|
||||||
|
private static final String URL_SECURED_BY_BASIC_AUTHENTICATION = "http://browserspy.dk/password-ok.php";
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenSendPostRequest_thenCorrect() throws IOException {
|
||||||
|
|
||||||
|
OkHttpClient client = new OkHttpClient();
|
||||||
|
|
||||||
|
RequestBody formBody = new FormBody.Builder()
|
||||||
|
.add("username", "test")
|
||||||
|
.add("password", "test")
|
||||||
|
.build();
|
||||||
|
|
||||||
|
Request request = new Request.Builder()
|
||||||
|
.url(BASE_URL + "/users")
|
||||||
|
.post(formBody)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
Call call = client.newCall(request);
|
||||||
|
Response response = call.execute();
|
||||||
|
|
||||||
|
assertThat(response.code(), equalTo(200));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenSendPostRequestWithAuthorization_thenCorrect() throws IOException {
|
||||||
|
|
||||||
|
String postBody = "test post";
|
||||||
|
|
||||||
|
OkHttpClient client = new OkHttpClient();
|
||||||
|
|
||||||
|
Request request = new Request.Builder()
|
||||||
|
.url(URL_SECURED_BY_BASIC_AUTHENTICATION)
|
||||||
|
.addHeader("Authorization", Credentials.basic("test", "test"))
|
||||||
|
.post(RequestBody.create(MediaType.parse("text/x-markdown; charset=utf-8"), postBody))
|
||||||
|
.build();
|
||||||
|
|
||||||
|
Call call = client.newCall(request);
|
||||||
|
Response response = call.execute();
|
||||||
|
|
||||||
|
assertThat(response.code(), equalTo(200));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenPostJson_thenCorrect() throws IOException {
|
||||||
|
|
||||||
|
OkHttpClient client = new OkHttpClient();
|
||||||
|
|
||||||
|
String json = "{\"id\":1,\"name\":\"John\"}";
|
||||||
|
|
||||||
|
RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), json);
|
||||||
|
|
||||||
|
Request request = new Request.Builder()
|
||||||
|
.url(BASE_URL + "/users/detail")
|
||||||
|
.post(body)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
Call call = client.newCall(request);
|
||||||
|
Response response = call.execute();
|
||||||
|
|
||||||
|
assertThat(response.code(), equalTo(200));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenSendMultipartRequest_thenCorrect() throws IOException {
|
||||||
|
|
||||||
|
OkHttpClient client = new OkHttpClient();
|
||||||
|
|
||||||
|
RequestBody requestBody = new MultipartBody.Builder()
|
||||||
|
.setType(MultipartBody.FORM)
|
||||||
|
.addFormDataPart("username", "test")
|
||||||
|
.addFormDataPart("password", "test")
|
||||||
|
.addFormDataPart("file", "file.txt",
|
||||||
|
RequestBody.create(MediaType.parse("application/octet-stream"), new File("src/test/resources/test.txt")))
|
||||||
|
.build();
|
||||||
|
|
||||||
|
Request request = new Request.Builder()
|
||||||
|
.url(BASE_URL + "/users/multipart")
|
||||||
|
.post(requestBody)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
Call call = client.newCall(request);
|
||||||
|
Response response = call.execute();
|
||||||
|
|
||||||
|
assertThat(response.code(), equalTo(200));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
package org.baeldung.okhttp;
|
||||||
|
|
||||||
|
import static org.hamcrest.Matchers.equalTo;
|
||||||
|
import static org.junit.Assert.assertThat;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import okhttp3.Call;
|
||||||
|
import okhttp3.OkHttpClient;
|
||||||
|
import okhttp3.Request;
|
||||||
|
import okhttp3.Response;
|
||||||
|
|
||||||
|
public class OkHttpRedirectTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenSetFollowRedirects_thenNotRedirected() throws IOException {
|
||||||
|
|
||||||
|
OkHttpClient client = new OkHttpClient().newBuilder()
|
||||||
|
.followRedirects(false)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
Request request = new Request.Builder()
|
||||||
|
.url("http://t.co/I5YYd9tddw")
|
||||||
|
.build();
|
||||||
|
|
||||||
|
Call call = client.newCall(request);
|
||||||
|
Response response = call.execute();
|
||||||
|
|
||||||
|
assertThat(response.code(), equalTo(301));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,74 @@
|
||||||
|
package org.baeldung.okhttp;
|
||||||
|
|
||||||
|
import okhttp3.RequestBody;
|
||||||
|
import okhttp3.MediaType;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import okio.Buffer;
|
||||||
|
import okio.BufferedSink;
|
||||||
|
import okio.ForwardingSink;
|
||||||
|
import okio.Okio;
|
||||||
|
import okio.Sink;
|
||||||
|
|
||||||
|
public class ProgressRequestWrapper extends RequestBody {
|
||||||
|
|
||||||
|
protected RequestBody delegate;
|
||||||
|
protected ProgressListener listener;
|
||||||
|
|
||||||
|
protected CountingSink countingSink;
|
||||||
|
|
||||||
|
public ProgressRequestWrapper(RequestBody delegate, ProgressListener listener) {
|
||||||
|
this.delegate = delegate;
|
||||||
|
this.listener = listener;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MediaType contentType() {
|
||||||
|
return delegate.contentType();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long contentLength() throws IOException {
|
||||||
|
return delegate.contentLength();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeTo(BufferedSink sink) throws IOException {
|
||||||
|
|
||||||
|
BufferedSink bufferedSink;
|
||||||
|
|
||||||
|
countingSink = new CountingSink(sink);
|
||||||
|
bufferedSink = Okio.buffer(countingSink);
|
||||||
|
|
||||||
|
delegate.writeTo(bufferedSink);
|
||||||
|
|
||||||
|
bufferedSink.flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected final class CountingSink extends ForwardingSink {
|
||||||
|
|
||||||
|
private long bytesWritten = 0;
|
||||||
|
|
||||||
|
public CountingSink(Sink delegate) {
|
||||||
|
super(delegate);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void write(Buffer source, long byteCount) throws IOException {
|
||||||
|
|
||||||
|
super.write(source, byteCount);
|
||||||
|
|
||||||
|
bytesWritten += byteCount;
|
||||||
|
listener.onRequestProgress(bytesWritten, contentLength());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface ProgressListener {
|
||||||
|
|
||||||
|
void onRequestProgress(long bytesWritten, long contentLength);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
hello world
|
Loading…
Reference in New Issue