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!