Home > Enterprise >  REST Server-Client Communication
REST Server-Client Communication

Time:05-28

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.

  • Related