Почему 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\"}";

и это работало нормально.

Другие вопросы по тегам