Why does converting this Python POST request to Java not work?

I'm trying to convert this Python code using the Python Requests HTTP library into Java code (for Android).

import requests
payload = {"attr[val1]":123,
           "attr[val2]":456,
           "time":0,
           "name":"Foo","surname":"Bar"}

r = requests.post("http://jakiro.herokuapp.com/api", data=payload)
r.status_code
r.text

This is what I've done so far:

protected void sendJson() {
    Thread t = new Thread() {

        public void run() {
            Looper.prepare(); //For Preparing Message Pool for the child Thread
            HttpClient client = new DefaultHttpClient();
            HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000); //Timeout Limit
            HttpResponse response;
            JSONObject json = new JSONObject();

            try {
                Log.v("SOMETHING_NAME3", "Creating POST");
                HttpPost post = new HttpPost("http://jakiro.herokuapp.com/api");
                json.put(MessageAttribute.SURNAME, "Bar");
                json.put(MessageAttribute.VAL1, 123);
                json.put(MessageAttribute.VAL2, 456);
                json.put(MessageAttribute.name, "Foo");
                json.put(MessageAttribute.TIME, 0);
                StringEntity se = new StringEntity( json.toString() );
                se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
                post.setEntity(se);
                response = client.execute(post);

                /*Checking response */
                if(response!=null){
                    InputStream in = response.getEntity().getContent(); //Get the data in the entity
                    String foo = convertStreamToString(in);
                    Log.v("SOMETHING_NAME2", foo); // Gives me "Bad request"
                }

            } catch(Exception e) {
                e.printStackTrace();
                Log.v("SOMETHING_NAME", "Cannot Establish Connection");
            }

            Looper.loop(); //Loop in the message queue
        }
    };

    t.start();
}

I've checked the response with response.getStatusLine().getStatusCode() and I get back a 400 from the server. The Python code works fine, but in Java on an Android device it doesn't. I can't see to figure out why though.

Answers


@Blender's link was the correct solution at the link: How to use parameters with HttpPost

The correct way to url-encode was to create BasicNameValuePairs and encode that as such:

postParameters = new ArrayList<NameValuePair>();
postParameters.add(new BasicNameValuePair("param1", "param1_value"));
postParameters.add(new BasicNameValuePair("param2", "param2_value"));

httppost.setEntity(new UrlEncodedFormEntity(postParameters));

Need Your Help

"Access Denied Code 5" PHP Rename Error in Symfony2/Doctrine2

php symfony doctrine-orm doctrine

I am getting the infamous Doctrine "PHP Rename Access Denied Code 5" error in my Symfony2 project when logging in using the User entity:

Magento 1.6 - Paypal Standard is not taking to paypal Payment page

paypal paypal-sandbox magento-1.6

My Magento 1.6 settings with paypal is not working at all. I am trying to setup Website Payments Standard however its not working. Its taking me to https://www.sandbox.paypal.com/home instead of the