Почему Android HttpURLConnection не может создать актив в службах мультимедиа Azure с помощью REST API?
Я пытаюсь создать актив в службах мультимедиа Azure с помощью REST API из Android. Я следую этой документации, и это мой код для подключения к конечной точке AMS от Android,
urlConnection = (HttpURLConnection) this._url.openConnection();
urlConnection.setRequestProperty("Content-Type", String.valueOf("application/json"));
urlConnection.setRequestProperty("DataServiceVersion", String.valueOf("1.0;NetFx"));
urlConnection.setRequestProperty("MaxDataServiceVersion", String.valueOf("3.0;NetFx"));
urlConnection.setRequestProperty("Accept", String.valueOf("application/json"));
urlConnection.setRequestProperty("Accept-Charset", String.valueOf("UTF-8"));
urlConnection.setRequestProperty("Authorization", String.format(Locale.ENGLISH, "Bearer %s", _token));
urlConnection.setRequestProperty("x-ms-version", String.valueOf(2.11));
urlConnection.setRequestProperty("x-ms-client-request-id", UUID.randomUUID().toString());
urlConnection.setRequestProperty("Host", this._host);
urlConnection.setRequestProperty("Content-Length", String.valueOf(this._postData.length));
urlConnection.setRequestProperty("Expect", String.valueOf("100-continue"));
urlConnection.setConnectTimeout(CONNECTION_TIME_OUT);
urlConnection.setReadTimeout(CONNECTION_READ_TIME_OUT);
urlConnection.setInstanceFollowRedirects(true);
urlConnection.setRequestMethod("POST");
urlConnection.setUseCaches(false);
urlConnection.setDoOutput(true);
urlConnection.setDoInput(true);
OutputStream wr= urlConnection.getOutputStream();
wr.write(_postData);
wr.flush();
wr.close();
И мой _postData
переменная - это байтовый массив, который я конвертирую из json,
_fileName = _fileName.replace(" ", "-");
JSONObject jo = new JSONObject();
jo.put("Name", _fileName+".mp4");
jo.put("Options", String.valueOf(0));
this._postData = jo.toString().getBytes("UTF-8");
Я попытался использовать клиентское расширение REST API Google Chrome, чтобы проверить почтовый запрос, и он работает нормально. Я получил ответ, который ожидал от клиентского расширения REST API Chrome, но при использовании Android я не получаю такой же ответ. Я получаю этот ответ из этого кода, который я уже выполнил до запуска этого кода. Я использовал обе конечные точки https://media.windows.net/
а также https://wamsbayclus001rest-hs.cloudapp.net/
но это не работает с Android. Я считаю, что Android меняет заголовки или что-то не так с заголовками, которые AMS неправильно анализирует. Кто-нибудь может подсказать мне, как этого добиться с помощью Android HttpUrlConnection
?
Благодарю.
1 ответ
Я исправил это, изменив OutputStream
в DataOutputStream
DataOutputStream wrr = new DataOutputStream(urlConnection.getOutputStream());
wrr.write(this._postData);
wrr.flush();
wrr.close();
и изменил мой массив JSON в строку,
String s = "{\"Name\":\"" + _fileName + ".mp4\", \"Options\":\"0\"}";
и это работало нормально.