Skip to content

Commit 11993b3

Browse files
committed
issue #511 allow setting version on a per-request basis
1 parent ad95b01 commit 11993b3

File tree

4 files changed

+57
-1
lines changed

4 files changed

+57
-1
lines changed

unirest-bdd-tests/src/test/java/BehaviorTests/Http2Test.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import java.net.http.HttpClient;
3535

3636
public class Http2Test extends BddTest {
37+
3738
@Test @Disabled
3839
void canMakeHttp2Requests() {
3940
Unirest.config().version(HttpClient.Version.HTTP_2);
@@ -69,4 +70,30 @@ void dontSendHttp2HeadersForHttp1() {
6970
.assertNoHeader("Upgrade")
7071
.assertNoHeader("HTTP2-Settings");
7172
}
73+
74+
@Test
75+
void overrideConfigPerRequest() {
76+
Unirest.config().version(HttpClient.Version.HTTP_1_1);
77+
78+
Unirest.get(MockServer.GET)
79+
.version(HttpClient.Version.HTTP_2)
80+
.asObject(RequestCapture.class)
81+
.getBody()
82+
.assertHeader("Connection", "Upgrade, HTTP2-Settings")
83+
.assertHeader("Upgrade", "h2c")
84+
.assertHeader("HTTP2-Settings", "AAEAAEAAAAIAAAABAAMAAABkAAQBAAAAAAUAAEAA");
85+
}
86+
87+
@Test
88+
void overrideConfigPerRequest2() {
89+
Unirest.config().version(HttpClient.Version.HTTP_2);
90+
91+
Unirest.get(MockServer.GET)
92+
.version(HttpClient.Version.HTTP_1_1)
93+
.asObject(RequestCapture.class)
94+
.getBody()
95+
.assertNoHeader("Connection")
96+
.assertNoHeader("Upgrade")
97+
.assertNoHeader("HTTP2-Settings");
98+
}
7299
}

unirest/src/main/java/kong/unirest/core/BaseRequest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
package kong.unirest.core;
2727

2828
import java.io.File;
29+
import java.net.http.HttpClient;
2930
import java.nio.file.CopyOption;
3031
import java.time.Instant;
3132
import java.util.Collection;
@@ -51,6 +52,7 @@ abstract class BaseRequest<R extends HttpRequest> implements HttpRequest<R> {
5152
protected Path url;
5253
private Integer connectTimeout;
5354
private ProgressMonitor downloadMonitor;
55+
private HttpClient.Version version;
5456

5557
BaseRequest(BaseRequest httpRequest) {
5658
this.config = httpRequest.config;
@@ -59,6 +61,7 @@ abstract class BaseRequest<R extends HttpRequest> implements HttpRequest<R> {
5961
this.headers.putAll(httpRequest.headers);
6062
this.connectTimeout = httpRequest.connectTimeout;
6163
this.objectMapper = httpRequest.objectMapper;
64+
this.version = httpRequest.version;
6265
}
6366

6467
BaseRequest(Config config, HttpMethod method, String url) {
@@ -177,6 +180,12 @@ public R downloadMonitor(ProgressMonitor monitor) {
177180
return (R) this;
178181
}
179182

183+
@Override
184+
public R version(HttpClient.Version value) {
185+
this.version = value;
186+
return (R) this;
187+
}
188+
180189
@Override
181190
public HttpResponse<Empty> asEmpty() {
182191
return request(BasicResponse::new, Empty.class);
@@ -424,6 +433,11 @@ public Instant getCreationTime() {
424433
return creation;
425434
}
426435

436+
@Override
437+
public HttpClient.Version getVersion() {
438+
return version;
439+
}
440+
427441
private <T> T valueOr(T x, Supplier<T> o) {
428442
if (x != null) {
429443
return x;

unirest/src/main/java/kong/unirest/core/HttpRequest.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
package kong.unirest.core;
2727

2828
import java.io.File;
29+
import java.net.http.HttpClient;
2930
import java.nio.file.CopyOption;
3031
import java.time.Instant;
3132
import java.util.Collection;
@@ -186,6 +187,14 @@ public interface HttpRequest<R extends HttpRequest> {
186187
*/
187188
R downloadMonitor(ProgressMonitor monitor);
188189

190+
191+
/**
192+
* sets the HTTP version for the request. This will override any global config
193+
* @param version the version
194+
* @return this request builder
195+
*/
196+
R version(HttpClient.Version version);
197+
189198
/**
190199
* Executes the request and returns the response with the body mapped into a String
191200
* @return response
@@ -422,4 +431,10 @@ default Optional<Body> getBody(){
422431
* @return the instant the request object was created in UTC (not when it was sent).
423432
*/
424433
Instant getCreationTime();
434+
435+
/**
436+
* gets the version for the request, or null if not set.
437+
* @return the version
438+
*/
439+
HttpClient.Version getVersion();
425440
}

unirest/src/main/java/kong/unirest/core/java/JavaClient.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ private java.net.http.HttpRequest getRequest(HttpRequest<?> request) {
8282
try {
8383
var url = URI.create(request.getUrl());
8484
var jreq = newBuilder(url)
85-
.version(config.getVersion())
85+
.version(request.getVersion() != null ? request.getVersion() : config.getVersion())
8686
.method(
8787
request.getHttpMethod().name(),
8888
new BodyBuilder(request).getBody()

0 commit comments

Comments
 (0)