Skip to content

Commit 1ea2dd8

Browse files
committed
Rewrite HttpHelper to use Apache's HTTP Client API
Hopefully this fixes #4.
1 parent 1851498 commit 1ea2dd8

File tree

2 files changed

+27
-39
lines changed

2 files changed

+27
-39
lines changed

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ dependencies {
9797
includeOrShade(modImplementation("me.lucko:fabric-permissions-api:0.3.1")!!)
9898
}
9999

100-
val useSVC = false
100+
val useSVC = true
101101

102102
if (useSVC)
103103
modRuntimeOnly("maven.modrinth:simple-voice-chat:${mcData.loader.friendlyString}-${if (mcData.version != MinecraftVersion.VERSION_1_21_1) mcData.version else "1.21"}-${project.property("voicechat_version")}")

src/main/kotlin/xyz/bluspring/unitytranslate/util/HttpHelper.kt

Lines changed: 26 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -3,53 +3,41 @@ package xyz.bluspring.unitytranslate.util
33
import com.google.gson.JsonElement
44
import com.google.gson.JsonObject
55
import com.google.gson.JsonParser
6-
import java.io.BufferedInputStream
7-
import java.io.BufferedOutputStream
8-
import java.net.HttpURLConnection
9-
import java.net.URL
6+
import org.apache.http.HttpHeaders
7+
import org.apache.http.client.config.CookieSpecs
8+
import org.apache.http.client.config.RequestConfig
9+
import org.apache.http.client.methods.HttpPost
10+
import org.apache.http.entity.StringEntity
11+
import org.apache.http.impl.client.HttpClients
12+
import org.apache.http.util.EntityUtils
1013

1114
object HttpHelper {
1215
fun post(uri: String, body: JsonObject, headers: Map<String, String> = mapOf()): JsonElement {
13-
val url = URL(uri)
14-
var connection: HttpURLConnection? = null
15-
16-
val data = body.toString().toByteArray(Charsets.UTF_8)
17-
18-
try {
19-
connection = url.openConnection() as HttpURLConnection
20-
connection.requestMethod = "POST"
21-
connection.connectTimeout = 60_000
22-
connection.readTimeout = 60_000
23-
24-
connection.setRequestProperty("Accept", "application/json")
25-
connection.setRequestProperty("Content-Type", "application/json")
26-
headers.forEach { (key, value) ->
27-
connection.setRequestProperty(key, value)
16+
HttpClients.createDefault().use { httpClient ->
17+
val request = HttpPost(uri)
18+
request.config = RequestConfig.custom()
19+
.setConnectTimeout(60_000)
20+
.setSocketTimeout(60_000)
21+
.setCookieSpec(CookieSpecs.STANDARD)
22+
.setConnectionRequestTimeout(60_000)
23+
.build()
24+
25+
request.setHeader(HttpHeaders.ACCEPT, "application/json")
26+
request.setHeader(HttpHeaders.CONTENT_TYPE, "application/json")
27+
for ((key, value) in headers) {
28+
request.setHeader(key, value)
2829
}
2930

30-
connection.doOutput = true
31-
connection.setFixedLengthStreamingMode(data.size)
31+
request.entity = StringEntity(body.toString())
3232

33-
val outputStream = BufferedOutputStream(connection.outputStream)
33+
val response = httpClient.execute(request)
3434

35-
outputStream.write(data)
36-
outputStream.flush()
37-
outputStream.close()
35+
if (response.statusLine.statusCode / 100 != 2)
36+
throw Exception("Failed to load $uri (code: ${response.statusLine.statusCode})")
3837

39-
if (connection.responseCode / 100 != 2) {
40-
throw Exception("Failed to load $uri (code: ${connection.responseCode})")
41-
} else {
42-
val inputStream = BufferedInputStream(connection.inputStream)
43-
val reader = inputStream.bufferedReader(Charsets.UTF_8)
44-
val result = JsonParser.parseReader(reader)
38+
val responseBody = EntityUtils.toString(response.entity, Charsets.UTF_8)
4539

46-
reader.close()
47-
inputStream.close()
48-
49-
return result
50-
}
51-
} finally {
52-
connection?.disconnect()
40+
return JsonParser.parseString(responseBody)
5341
}
5442
}
5543
}

0 commit comments

Comments
 (0)