Sumary:
Use:
data = URLEncoder.encode("para1", "UTF-8") + "=" + URLEncoder.encode("value1", "UTF-8");
Don’t use:
data = URLEncoder.encode("para1=value1", "UTF-8");
Posting data to a server should be very easy. But for some newbies, it could make troubles. I’m a newbie.
Normally after googling, you should find something like this:
From:http://www.javadb.com/sending-a-post-request-with-parameters-from-a-java-class
//Build parameter string String data = "width=50&height=100"; try { // Send the request URL url = new URL("http://www.somesite.com"); URLConnection conn = url.openConnection(); conn.setDoOutput(true); OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream()); //write parameters writer.write(data); writer.flush(); // Get the response StringBuffer answer = new StringBuffer(); BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line; while ((line = reader.readLine()) != null) { answer.append(line); } writer.close(); reader.close(); //Output the response System.out.println(answer.toString()); } catch (MalformedURLException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); }
If your parameters and values are as simple as this, everything is OK. But if not, you may need a URLEncoder! And that’s what makes me in trouble.
If you write your code as
data = URLEncoder.encode(data, "UTF-8"); //write parameters writer.write(data); writer.flush();
You are in trouble now. All “width=50&height=100” will be expained as ONE parameter name.
And think a little. Why we need an Encoder? We use an encoder to convert a special charactor into something like %xx, if your code is like above, “=”will be converted. And that now we supposed. So it should be like this:
data = URLEncoder.encode("para1", "UTF-8") + "=" + URLEncoder.encode("value1", "UTF-8"); data += "&" + URLEncoder.encode("para2", "UTF-8") + "=" + URLEncoder.encode("value2", "UTF-8");
That’s it!