diff --git a/http-api/pom.xml b/http-api/pom.xml
index 94640a6e63..a3c8dca002 100644
--- a/http-api/pom.xml
+++ b/http-api/pom.xml
@@ -71,6 +71,12 @@
1.7.12
test
+
+ com.squareup.okhttp3
+ mockwebserver
+ 3.7.0
+ test
+
diff --git a/http-api/src/main/java/net/runelite/http/api/RuneLiteAPI.java b/http-api/src/main/java/net/runelite/http/api/RuneLiteAPI.java
index b23a0b9916..49387a233e 100644
--- a/http-api/src/main/java/net/runelite/http/api/RuneLiteAPI.java
+++ b/http-api/src/main/java/net/runelite/http/api/RuneLiteAPI.java
@@ -29,7 +29,10 @@ import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import okhttp3.HttpUrl;
+import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.Response;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -39,7 +42,7 @@ public class RuneLiteAPI
public static final String RUNELITE_AUTH = "RUNELITE-AUTH";
- public static final OkHttpClient CLIENT = new OkHttpClient();
+ public static final OkHttpClient CLIENT;
public static final Gson GSON = new Gson();
private static final String BASE = "https://api.runelite.net";
@@ -67,6 +70,23 @@ public class RuneLiteAPI
{
logger.error(null, ex);
}
+
+ CLIENT = new OkHttpClient.Builder()
+ .addNetworkInterceptor(new Interceptor()
+ {
+ private final String USER_AGENT = "RuneLite/" + version;
+
+ @Override
+ public Response intercept(Chain chain) throws IOException
+ {
+ Request userAgentRequest = chain.request()
+ .newBuilder()
+ .header("User-Agent", USER_AGENT)
+ .build();
+ return chain.proceed(userAgentRequest);
+ }
+ })
+ .build();
}
public static HttpUrl getApiRoot()
diff --git a/http-api/src/test/java/net/runelite/http/api/RuneLiteAPITest.java b/http-api/src/test/java/net/runelite/http/api/RuneLiteAPITest.java
new file mode 100644
index 0000000000..46633f9528
--- /dev/null
+++ b/http-api/src/test/java/net/runelite/http/api/RuneLiteAPITest.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2018, Adam
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.runelite.http.api;
+
+import java.io.IOException;
+import okhttp3.Request;
+import okhttp3.mockwebserver.MockResponse;
+import okhttp3.mockwebserver.MockWebServer;
+import org.junit.After;
+import static org.junit.Assert.assertEquals;
+import org.junit.Before;
+import org.junit.Test;
+
+public class RuneLiteAPITest
+{
+ private final MockWebServer server = new MockWebServer();
+
+ @Before
+ public void before() throws IOException
+ {
+ server.enqueue(new MockResponse().setBody("OK"));
+
+ server.start();
+ }
+
+ @After
+ public void after() throws IOException
+ {
+ server.shutdown();
+ }
+
+ @Test
+ public void testUserAgent() throws IOException, InterruptedException
+ {
+ Request request = new Request.Builder()
+ .url(server.url("/").url())
+ .build();
+ RuneLiteAPI.CLIENT.newCall(request).execute().close();
+
+ assertEquals("RuneLite/" + RuneLiteAPI.getVersion(), server.takeRequest().getHeader("User-Agent"));
+ }
+}
\ No newline at end of file