I'm developing an Android app in Java and I need to add a REST Server-Client Communication feature to it. I assume that the following code should post data to a .php file and will be thankful if someone explains to me what does it do and how to use it properly:
public static String urlAddress = "http://gp.gpashev.com:93/testTels/service.php";
public static String getPostDataString(HashMap<String, String> params)
throws Exception
{
StringBuilder feedback = new StringBuilder();
boolean first = true;
for(Map.Entry<String, String> entry: params.entrySet()){
if(first == true){
first = false;
}else{
feedback.append("&");
}
feedback.append(URLEncoder.encode(entry.getKey(), "UTF-8"));
feedback.append("=");
feedback.append(URLEncoder.encode(entry.getValue(), "UTF-8"));
}
return feedback.toString();
}
public static String postData(String methodName, String userName, String fileJSON)
throws Exception
{
String result = "";
HashMap<String, String> params = new HashMap<>();
params.put("methodName", methodName);
params.put("userName", userName);
params.put("fileJSON", fileJSON);
URL url = new URL(urlAddress);
HttpURLConnection client = (HttpURLConnection) url.openConnection();
client.setRequestMethod("POST");
client.setRequestProperty("multipart/form-data", urlAddress ";charset=UTF-8");
client.setDoInput(true);
client.setDoOutput(true);
OutputStream os = client.getOutputStream();
BufferedWriter bw = new BufferedWriter(
new OutputStreamWriter(os, "UTF-8")
);
String a = getPostDataString(params);
bw.write(a);
bw.close();
os.close();
int ResponseCode = client.getResponseCode();
if(ResponseCode == HttpURLConnection.HTTP_OK){
BufferedReader br = new BufferedReader(
new InputStreamReader(client.getInputStream())
);
String line = "";
while((line = br.readLine())!= null){
result =line "\n";
}
br.close();
}else{
throw new Exception("HTTP ERROR Response code: " ResponseCode);
}
return result;
}
CodePudding user response:
My answer is in as comments in your code:
public static String urlAddress = "http://gp.gpashev.com:93/testTels/service.php";
// parse Map to urlencode string: key1=value&key2=value2
// URL special char will be escaped, f.e.: ' ' to ' '
public static String getPostDataString(HashMap<String, String> params)
throws Exception
{
StringBuilder feedback = new StringBuilder();
boolean first = true;
for(Map.Entry<String, String> entry: params.entrySet()){
if(first == true){
first = false;
}else{
feedback.append("&");
}
feedback.append(URLEncoder.encode(entry.getKey(), "UTF-8"));
feedback.append("=");
feedback.append(URLEncoder.encode(entry.getValue(), "UTF-8"));
}
return feedback.toString();
}
public static String postData(String methodName, String userName, String fileJSON)
throws Exception
{
String result = ""; // not nessessary define here
// create and fill paramters
HashMap<String, String> params = new HashMap<>();
params.put("methodName", methodName);
params.put("userName", userName);
params.put("fileJSON", fileJSON);
// next 2 lines: prepare Http connection to URL
URL url = new URL(urlAddress);
HttpURLConnection client = (HttpURLConnection) url.openConnection();
// set HTTP method to POST
client.setRequestMethod("POST");
// add request header multipart/form-data, I am not sure, if it is nessessary in this case
client.setRequestProperty("multipart/form-data", urlAddress ";charset=UTF-8");
// set connection for using input stream (reading response), default is true, btw.
client.setDoInput(true);
// set connection for using output stream (writing request)
client.setDoOutput(true);
// next 8 lines write parameters defined early to connection as urlencoded string
// using try-with-resources is better
OutputStream os = client.getOutputStream();
BufferedWriter bw = new BufferedWriter(
new OutputStreamWriter(os, "UTF-8")
);
String a = getPostDataString(params);
bw.write(a);
bw.close();
os.close();
// make request and receive response code
int ResponseCode = client.getResponseCode();
if(ResponseCode == HttpURLConnection.HTTP_OK){
// read response from input stream to result variable defined early
// using try-with-resources is better
BufferedReader br = new BufferedReader(
new InputStreamReader(client.getInputStream())
);
String line = "";
while((line = br.readLine())!= null){
result =line "\n";
}
br.close();
}else{
throw new Exception("HTTP ERROR Response code: " ResponseCode);
}
return result;
}
I hope this is helpfull. In general: postData
make HTTP Post request on given URL. The code use method parameters as request body. If request returns 200 code, method returns response body as text, otherwise throws IOException.