0

I have a post request working successfully in Postman, but when I make the same request from my Android app, I get "Internal Server Error". Do you see any difference between these two requests?

Postman

Postman request

Android App

class MakeRequest extends AsyncTask<Void, Void, Void> {

        @Override
        protected Void doInBackground(Void... voids) {
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("https://sample.com/test");
            httppost.setHeader("Content-type", "application/json");
            httppost.setHeader("Authorization", getB64Auth("username", "password"));

            try {
                JSONObject identity = new JSONObject();
                identity.put("type", "number");
                identity.put("endpoint", "12345");

                JSONObject options = new JSONObject();
                options.put("num", "12345");

                JSONObject body = new JSONObject();
                body.put("identity", identity);
                body.put("method", "test");
                body.put("options", options);

                StringEntity se = new StringEntity(body.toString());
                httppost.setEntity(se);
            } catch (IOException e) {
                Log.d("IOException", e.toString());
            } catch (JSONException e) {
                Log.d("JSONException", e.toString());
            }

            try {
                ResponseHandler handler = new BasicResponseHandler();
                HttpResponse response = httpclient.execute(httppost);
                Log.d("HttpResponse", handler.handleResponse(response).toString());
            } catch (ClientProtocolException e) {
                Log.d("ClientProtocolException", e.toString());
            } catch (IOException e) {
                Log.d("IOException", e.toString());
            }

            return null;
        }

        private String getB64Auth (String key, String secret) {
            String source=key+":"+secret;
            String ret="Basic "+Base64.encodeToString(source.getBytes(),Base64.URL_SAFE|Base64.NO_WRAP);
            return ret;
        }

    }

Other thoughts/hints:

Authentication is working properly in the java code. I tried with wrong username & password, and I got "Invalid Authorization"

The JSON string is exactly the same as the one in postman. I printed body.toString(), copied and pasted into Postman, and the request worked fine in Postman.

mravca
  • 699
  • 1
  • 6
  • 11

1 Answers1

0

you should change httppost.setHeader("Content-type", "application/json"); to httppost.setHeader("Content-type", "application/form-data"); or httppost.setHeader("Content-type", "application/x-www-form-urlencoded");

this should solve your issue.

Sandeep
  • 59
  • 4