From 5bdcda66975bbaf04562b37ab5205cd741781ae2 Mon Sep 17 00:00:00 2001 From: Michael Evans Date: Wed, 5 Aug 2015 01:42:28 -0400 Subject: [PATCH] Changing the scheme will update the default port --- .../java/com/squareup/okhttp/HttpUrlTest.java | 17 +++++++++++++++++ .../main/java/com/squareup/okhttp/HttpUrl.java | 7 ++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/okhttp-tests/src/test/java/com/squareup/okhttp/HttpUrlTest.java b/okhttp-tests/src/test/java/com/squareup/okhttp/HttpUrlTest.java index 3af2c4329..b281069f5 100644 --- a/okhttp-tests/src/test/java/com/squareup/okhttp/HttpUrlTest.java +++ b/okhttp-tests/src/test/java/com/squareup/okhttp/HttpUrlTest.java @@ -602,6 +602,23 @@ public final class HttpUrlTest { assertEquals("fragment", url.fragment()); } + @Test public void changingSchemeChangesDefaultPort() throws Exception { + assertEquals(443, HttpUrl.parse("http://example.com") + .newBuilder() + .scheme("https") + .build().port()); + + assertEquals(80, HttpUrl.parse("https://example.com") + .newBuilder() + .scheme("http") + .build().port()); + + assertEquals(1234, HttpUrl.parse("https://example.com:1234") + .newBuilder() + .scheme("http") + .build().port()); + } + @Test public void composeEncodesWhitespace() throws Exception { HttpUrl url = new HttpUrl.Builder() .scheme("http") diff --git a/okhttp/src/main/java/com/squareup/okhttp/HttpUrl.java b/okhttp/src/main/java/com/squareup/okhttp/HttpUrl.java index d56ea8253..dc8c7f2e0 100644 --- a/okhttp/src/main/java/com/squareup/okhttp/HttpUrl.java +++ b/okhttp/src/main/java/com/squareup/okhttp/HttpUrl.java @@ -570,7 +570,12 @@ public final class HttpUrl { result.encodedUsername = encodedUsername(); result.encodedPassword = encodedPassword(); result.host = host; - result.port = port; + // If we're set to a default port, unset it, in case of a scheme change. + if (port == defaultPort(scheme)) { + result.port = -1; + } else { + result.port = port; + } result.encodedPathSegments.clear(); result.encodedPathSegments.addAll(encodedPathSegments()); result.encodedQuery(encodedQuery());