2017-06-03 28 views
0

我正嘗試在Android上使用REST API在Azure媒體服務上創建資產。我下面this documentation這是我的代碼與來自Android的AMS端點連接,爲什麼Android HttpURLConnection無法使用REST API在Azure媒體服務上創建資產?

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"); 

我一直在使用谷歌試圖Chrome瀏覽器的REST api客戶端擴展程序來檢查發佈請求,它工作正常。我得到了我期望從Chrome的REST API客戶端擴展中得到的響應,但是使用Android時,我沒有得到相同的響應。我從這段代碼獲得this response,這是我在運行此代碼之前已執行的步驟。我已經使用了兩個端點https://media.windows.net/https://wamsbayclus001rest-hs.cloudapp.net/,但它不適用於Android。我相信Android正在改變Headers,或者AMS沒有正確解析的頭文件有問題。誰能指導我如何使用Android HttpUrlConnection來實現這個目標?

謝謝。

回答

0

我固定它通過改變OutputStreamDataOutputStream

DataOutputStream wrr = new DataOutputStream(urlConnection.getOutputStream()); 
     wrr.write(this._postData); 
     wrr.flush(); 
     wrr.close(); 

,並改變了我的JSON數組的字符串,

String s = "{\"Name\":\"" + _fileName + ".mp4\", \"Options\":\"0\"}";

它工作得很好。

相關問題