2017-09-03 1 views
0

Dieser cURL-Befehl funktioniert prima, wenn ich es auf meinem Terminal laufen:Gesuch in cURL arbeiten gut, aber nicht in Android Volley

curl -X POST -H "Content-Type: application/json" - H "Authorization: Grund uname: pass123" -d '{ "username": "uname", "Passwort": "pass123"}' "http://mysite123.com/api/Login"

Jetzt versuche ich, Android Volley zu verwenden um diese Postanfrage zu senden. Der Code lautet wie folgt:

RequestQueue queue = Volley.newRequestQueue(getApplicationContext()); 
    String url = "http://mysite123.com/api/Login"; 
    StringRequest stringRequest = new StringRequest(Request.Method.POST, url, 
      new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 

        Toast.makeText(MainActivity.this,response,Toast.LENGTH_LONG).show(); 
       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        Toast.makeText(MainActivity.this,error.toString(),Toast.LENGTH_LONG).show(); 
        error.printStackTrace(); 
       } 
      }){ 
     @Override 
     protected Map<String,String> getParams(){ 

      Map<String,String> params = new HashMap<String, String>(); 
      params.put("userName", "uname"); 
      params.put("password", "pass123"); 
      return params; 
     } 
     @Override 
     public Map<String, String> getHeaders() throws AuthFailureError { 
      Map<String,String> headers=new HashMap<String,String>(); 

      headers.put("Content-Type", "application/json"); 
      headers.put("Accept", "application/json"); 
      headers.put("Accept-Encoding", "utf-8"); 
      String creds = String.format("%s:%s","uname","pass123"); 
      String auth = "Basic " + Base64.encodeToString(creds.getBytes(), Base64.NO_WRAP); 
      headers.put("Authorization", auth); 
      return headers; 
     } 

    }; 
    queue.add(stringRequest); 

Aber es gibt mir Fehler in stacktrace als:

09-03 07: 46: 43,823 17.712-17.918/com.ankitshubham97.gpsmonitoring E/Volley: [ 108117] BasicNetwork.performRequest: Unerwarteter Antwortcode 400 für http://mysite123.com/api/Login 09-03 07: 46: 43.833 17712-17712/com.ankitshubham97.gpsmonitoring E/Qmage: isQIO: stream ist keine QIO-Datei 09-03 07:46: 43.843 17712-17712/com.ankitshubham97.gpsmonitoring W/System.err: com.android.volley.ServerError 09-03 07: 46: 43.853 17712-17712/com.ankitshubham97.gpsmo nitoring W/System.err: unter com.android.volley.toolbox.BasicNetwork.performRequest (BasicNetwork.java:163) 09-03 07: 46: 43.853 17712-17712/com.ankitshubham97.gpsmonitoring W/System.err: bei com.android.volley.NetworkDispatcher.run (NetworkDispatcher.java:112)

Was könnte das Problem sein? Oder irgendeine Methode, den curl-Befehl direkt von Android zu senden?

EDIT: Ich habe sogar https://incarnate.github.io/curl-to-php/ verwendet, um den obigen cURL-Befehl in PHP-Code zu konvertieren, und der PHP läuft auch gut. Ich frage mich, was mit Volley los ist!

+0

ich Ihre curl Befehl versucht, aber seine die gleiche Antwort 405 Methode gibt nicht erlaubt - DOSarrest Internet Security –

+0

Das heißt weil ich falsche URL, Benutzername und Passwort hier anstelle der echten angegeben habe. –

Antwort

0

Postman half mir. Also, das Problem war, dass '{"userName":"uname","password":"pass123"}' als rohe Form mit JSON-Format und im Körper (nicht als param) gesendet werden sollte. Also, habe ich diese Methode:

  @Override 
      public byte[] getBody() throws AuthFailureError { 
       try { 
        return requestBody == null ? null : requestBody.getBytes("utf-8"); 
       } catch (UnsupportedEncodingException uee) { 
        VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s", requestBody, "utf-8"); 
        return null; 
       } 
      } 
      @Override 
      public String getBodyContentType() { 
       return "application/json"; 
      } 

I definiert haben die requestBody vor als:

JSONObject jsonBody = new JSONObject(); 
    try{ 

     jsonBody.put("userName", "uname"); 
     jsonBody.put("password", "pass123"); 
    } 
    catch (JSONException e){ 

    } 

    final String requestBody = jsonBody.toString(); 
Verwandte Themen