2017-02-02 2 views
0

Ich habe ein Problem mit einer http-Authentifizierung. Kein Problem mit anderen Web-Service ohne Authentifizierung zu verbinden. Aber ich weiß nicht, wie ich mit dieser HTTP-Authentifizierung mit Android verbinden kann. Also in meiner App habe ich zwei Textfeld (Login und Passwort). Und eine Schaltfläche, um eine Verbindung zu einer Adresse herzustellen und Informationen über den Benutzer zu erhalten (JSON-Daten). In einem ersten Mal möchte ich Kennungen in Adresse übergeben: https://proxyepn-test.epnbn.net/wsapi/user. Wie https://login:[email protected]/wsapi/user. Und Daten im Protokoll anzeigen. Können Sie mir helfen?HTTP-Authentifizierung mit Android

` Ich versuche das.

public HashMap<String, String> btn_connexion(View view) { 
    etPseudo = (EditText) findViewById(R.id.editText); 
    etMdp = (EditText) findViewById(R.id.editText2); 
    final String pseudo = etPseudo.getText().toString(); 
    final String mdp = etMdp.getText().toString(); 


    //String urldisplay = "https://" + pseudo + ":" + mdp + "@proxyepn-test.epnbn.net/wsapi/user"; 

    @Override 
    public Map<String, String> getHeaders() throws AuthFailureErro { 
     HashMap<String, String> params = new HashMap<>(); 
     String creds = String.format("%s:%s", pseudo, mdp); 
     String auth = "Basic " + Base64.encodeToString(creds.getBytes(), Base64.NO_WRAP); 
     params.put("Authorization", auth); 
     return params; 


    } 



}` 

// Klasse, um die Verbindung

public static class RestOperation extends AsyncTask<String, Void, String> { 

    String content; 
    String error; 
    String data = ""; 


    @Override 
    protected String doInBackground(String... params) { 
     BufferedReader br = null; 

     URL url; 
     try { 
      url = new URL(params[0]); 

      URLConnection connection = url.openConnection(); 
      connection.setDoOutput(true); 

      OutputStreamWriter outputStreamWr = new OutputStreamWriter(connection.getOutputStream()); 
      outputStreamWr.write(data); 
      outputStreamWr.flush(); 

      br = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
      StringBuilder sb = new StringBuilder(); 
      String line = null; 

      while((line = br.readLine())!=null) { 
       sb.append(line); 
       sb.append(System.getProperty("line.separator")); 
      } 

      content = sb.toString(); 
      Log.i("content",content); 

     } catch (MalformedURLException e) { 
      error = e.getMessage(); 
      e.printStackTrace(); 
     } catch (IOException e) { 
      error = e.getMessage(); 
      e.printStackTrace(); 
     } finally { 
      try { 
       if(br != null) { 
        br.close(); 
       } 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
     return content; 
    } 

} 

// ein Beispiel der Verbindung mit einem Web-Service ohne Authentifizierung

String restURL = "https://proxyepn-test.epnbn.net/wsapi/epn"; 
    RestOperation test = new RestOperation(); 
    String[]tabInfos = null; 
    try { 

     String test2 = test.execute(restURL).get().toString(); 
     Log.i("result",test2); 

     JSONObject obj = new JSONObject(test2); 
     JSONObject data = obj.getJSONObject("data"); 
     Iterator<String> iterator = data.keys(); 
     while(iterator.hasNext()){ 
      String key = iterator.next(); 
      String name = data.getString(key); 

      tabInfos = name.split(","); 


      ... 



      } 
     } 

    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } catch (ExecutionException e) { 
     e.printStackTrace(); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

Antwort

0

Encode Ihre Benutzername und Passwort Base64 Zeichenfolge zu etablieren und Pass auf Kopfzeile Ihrer Anfrage in Authorization Schlüssel.

können Sie volley Bibliothek verwenden und in Header Benutzername und Passwort passieren, wie:

 @Override 
     public Map<String, String> getHeaders() throws AuthFailureError { 
      HashMap<String, String> params = new HashMap<>(); 
      String creds = String.format("%s:%s", "your-username", "your-password"); 
      String auth = "Basic " + Base64.encodeToString(creds.getBytes(), Base64.NO_WRAP); 
      params.put("Authorization", auth); 
      return params; 
     } 

Wenn Sie HttpUrlConnection verwenden dann als Basis Authentifizierung in Header übergeben:

 String creds = String.format("%s:%s", "your-username", "your-password"); 
     String auth = "Basic " + Base64.encodeToString(creds.getBytes(), Base64.NO_WRAP); 
     yourHttpUrlConnection.setRequestProperty("Authorization", auth); 
+0

thx, aber ich weiß nicht weiß, wie man das benutzt. Ich bearbeite meine Frage, um genauer zu sein. –

+0

@GregConstantin ich habe die Antwort bearbeitet fügen Sie diese Zeilen in Ihrer RestOperation-Klasse doInBackground-Methode – d1vivek681065

+0

Ich habe einen Fehler mit setRequestProperty. –