Я могу скрутить этот URL-адрес, чтобы получить токен доступа для Spotify Web API, используя следующий вызов из командной строки:
curl -H "Authorization: Basic <Base64 client_id:client_secret>" -d grant_type=client_credentials https://accounts.spotify.com/api/token
И я получаю ответ с api_token. Но когда я пытаюсь сделать это в java через Jsoup, я получаю ошибку 405:
Map<String, String> data = Maps.newHashMap();
data.put("grant_type", "client_credentials");
String clientCred =
new String(
Base64.encodeBase64((CLIENT_ID + ":" + CLIENT_SECRET).getBytes()));
String url = "https://accounts.spotify.com/api/token";
Document doc = Jsoup.connect(URIUtil.encodeQuery(url))
.header("Accept-Language", "en")
.header("Authorization", "Basic " + clientCred)
.header("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8")
.data(data)
.ignoreHttpErrors(true)
.header("Accept",
"text/html,application/xhtml+xml,application/xml;q=0.9"
+ ",*/*;q=0.8")
.get();
Я что-то делаю неправильно при настройке параметров запроса? Я также попробовал простой HttpURLConnection с теми же параметрами запроса, а также с ошибкой 405.
Когда вы используете флаг -d
в curl
вы фактически отправляете POST
. Если вы сделаете POST
с Jsoup
он будет работать.
Но Jsoup
будет жаловаться на org.jsoup.UnsupportedMimeTypeException
потому что сервер будет отвечать Content-Type: application/json
. Затем вы должны добавить .ignoreContentType(true)
и все готово.
Код будет выглядеть следующим образом:
Document doc = Jsoup.connect(url)
.header("Accept-Language", "en")
.header("Authorization", "Basic " + clientCred)
.header("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8")
.data(data)
.ignoreHttpErrors(true)
.ignoreContentType(true)
.header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9"+ ",*/*;q=0.8")
.post();
Кстати, я получаю {"error":"invalid_client"}
потому что у меня нет ключа, но я думаю, что все будет в порядке.
Надеюсь, это поможет.
Response
который дает вам больше информации в дополнение к содержимому ответа (например, код состояния и заголовки ответа). Пожалуйста, обратитесь к JSoup документам для получения дополнительной информации документов