Как отправить PUT запрос, содержащий в качестве параметра очень длинную строку, используя Jsoup
Пишу проект, работающий с Spotify API. Пытаюсь отправить запрос на изменение обложки плейлиста пользователя. Вот документация с офф. сайта. В запросе в качестве параметра требуется кодированное изображение в кодировке base64, т.е. получается очень длинная строка (в качестве примера кодировав одну картинку получил около 80.000 символов).
Если передать эту строку напрямую в качестве параметра возникает очевидная проблема:
java: constant string too long
Подскажите, пожалуйста, как правильно сформировать запрос.
Вызываемый метод:
public static void requestUploadImage(String playlistId, String imageBase64, String accessToken) {
try {
Jsoup.connect("https://api.spotify.com/v1/playlists/"
+ playlistId + "/images")
.method(Connection.Method.PUT)
.header("Accept-Language", "en")
.header("Content-Type", "application/json")
.ignoreHttpErrors(true)
.ignoreContentType(true)
.requestBody(imageBase64)
.header("Accept", "application/json")
.header("Authorization", "Bearer " + accessToken)
.execute()
.body();
} catch (IOException exception) {
exception.printStackTrace();
}
}
Пробовал вытаскивать из файла и возвращать строку сразу в requestBody. Тогда возникает другая ошибка:
avax.net.ssl.SSLException: Received fatal alert: record_overflow
at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:133)
at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:307)
at java.base/sun.security.ssl.Alert$AlertConsumer.consume(Alert.java:285)
at java.base/sun.security.ssl.TransportContext.dispatch(TransportContext.java:180)
at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:164)
at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1183)
at java.base/sun.security.ssl.SSLSocketImpl.readApplicationRecord(SSLSocketImpl.java:1153)
at java.base/sun.security.ssl.SSLSocketImpl$AppInputStream.read(SSLSocketImpl.java:828)
at java.base/java.io.BufferedInputStream.fill(BufferedInputStream.java:252)
at java.base/java.io.BufferedInputStream.read1(BufferedInputStream.java:292)
at java.base/java.io.BufferedInputStream.read(BufferedInputStream.java:351)
at java.base/sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:746)
at java.base/sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:689)
at java.base/sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:717)
at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1604)
at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1509)
at java.base/java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:527)
at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:330)
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:736)
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:707)
at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:297)
at spotify.JsoupRequest.requestUploadImage(JsoupRequest.java:70)
at main.Main.main(Main.java:15)