2016-08-12 2 views
1

Я пытаюсь отправить запрос POST, используя Plivo (VoIP-сервер), чтобы отправить SMS на мой мобильный телефон, но я просто получаю БЕСПЛАТНЫЙ ЗАПРОС (код запроса 400).Android - HttpsURLConnection - НЕОБХОДИМЫЙ ЗАПРОС

ошибка я получил "error": "invalid json data sent in raw POST"

Я не могу найти, где это не так.

Может кто-нибудь мне помочь?

 final AsyncTask<String, Void, Boolean> request = new AsyncTask<String, Void, Boolean>() { 

      @Override 
      protected Boolean doInBackground(String... strings) { 

       Boolean retorno = true; 

       HttpsURLConnection request = null; 
       try { 
        request = (HttpsURLConnection) finalUrl.openConnection(); 

        System.out.println("Define POST"); 
        request.setRequestMethod("POST"); 
        request.setUseCaches(false); 
        request.setDoOutput(true); 

        System.out.println("Define propriedades"); 
        request.setRequestProperty("Content-Type", "application/json"); 
        request.setRequestProperty("Accept", "application/json"); 
        request.setRequestProperty("Accept-Charset", "UTF-8"); 
        request.setRequestProperty("charset", "UTF-8"); 

        System.out.println("Define autenticação"); 
        String autenticacao = authID + ":" + authToken; 
        String basic = "Basic " + new String(Base64.encode(autenticacao.getBytes(), Base64.NO_WRAP)); 
        request.setRequestProperty("Authorization", basic); 

        System.out.println("Define parâmetros"); 
        JSONObject params = new JSONObject(); 
        params.put("dst", numeroDestino); 
        params.put("src", numeroOrigem); 
        params.put("text", body); 

        System.out.println("Faz conexão e requisição"); 
        request.connect(); 
        OutputStreamWriter postParaEnvio = new OutputStreamWriter(request.getOutputStream()); 
        postParaEnvio.write(URLEncoder.encode(params.toString(), "UTF-8")); 
        postParaEnvio.flush(); 
        postParaEnvio.close(); 

        int codigoStatus = request.getResponseCode(); 

        for (Map.Entry<String, List<String>> header : request.getHeaderFields().entrySet()) { 
         System.out.println(header.getKey() + "=" + header.getValue()); 
        } 

        if (codigoStatus == 202) { 
         System.out.println("OK"); 
        } else { 
         System.out.println("Falha"); 
         System.out.println(codigoStatus); 

         retorno = false; 
        } 

       } catch (IOException e) { 
        System.out.println("Falha Exception"); 
        e.printStackTrace(); 

        retorno = false; 
       } catch (JSONException e) { 
        e.printStackTrace(); 

        retorno = false; 
       } finally { 

        request.disconnect(); 
       } 

       return retorno; 
      } 

      @Override 
      protected void onPostExecute(Boolean result) { 

       indicadorDeAtividade.dismiss(); 

       if(result) { 

       } else { 
        mostrarErro(0, R.string.erroEnviarCodigo); 
       } 
      } 
     }.execute(); 
+0

Какого дополнительной информации Вы получаете с 400? –

+0

Почему бы вам просто не использовать библиотеки, такие как volley, это действительно упрощает работу – has19

+0

Plivo Sales Engineer здесь. Ответ 400 будет сопровождаться сообщением api_id и сообщением об ошибке, которое сообщит вам, почему это не удалось. Если у вас есть дополнительные вопросы или вы не можете понять это, обратитесь на [email protected] – CharlieC

ответ

0

решаемые

При отправке Json object, оно должно быть передано String, но она не может быть закодирован.

Модификация линии postParaEnvio.write(URLEncoder.encode(params.toString(), "UTF-8")); до postParaEnvio.write(params.toString()); решена проблема.

0

Я думаю, это может вам помочь. Кстати,
Моей Зависимости: gradle->
компиляции '' com.android.support:appcompat-v7:23.4.0

class BackGround extends AsyncTask<String, String, String> { 

    protected String doInBackground(String... params) { 
     String name = params[0]; 
     String password = params[1]; 
     String email = params[2]; 
     String phone=params[3]; 

     String data=""; 
     int tmp; 

     try { 
      URL url = new URL("http://domain.com/yourFile.php"); 
      String urlParams = "name="+name+"&password="+password+"&email="+email+"&phone="+phone; 

      HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); 
      httpURLConnection.setDoOutput(true); 
      OutputStream os = httpURLConnection.getOutputStream(); 
      os.write(urlParams.getBytes()); 
      os.flush(); 
      os.close(); 
      InputStream is = httpURLConnection.getInputStream(); 
      while((tmp=is.read())!=-1){ 
       data+= (char)tmp; 
      } 
      is.close(); 
      httpURLConnection.disconnect(); 
      return data; 

     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
      return "Exception: "+e.getMessage(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      return "Exception: "+e.getMessage(); 
     } 
    } 

    @Override 
    protected void onPostExecute(String s) { 
     if(s.equals("")){ 
      s="Data Saved! Success..."; 
     } 
     Toast.makeText(ctx, s, Toast.LENGTH_LONG).show(); 
    } 
} 
+0

Да. Это помогло. Большое спасибо. – GuiDupas