Search code examples
javaxmlpostxmlhttprequesthttp-post

JAVA Send Post Request which contains XML String


Problem Description

I'm trying to write a code which is sending POST request to the server. As server yet doesn't exist I can't test this part of code. With the request I must send XML as a String which look likes the string below:

String XMLSRequest = "<?xml version="1.0" encoding="UTF-8" standalone="no"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Header><AuthenticationHeader><Username>Victor</Username><Password>Apoyan</Password></AuthenticationHeader></soapenv:Body></soapenv:Envelope>"

Solution

String url = "https://testurl.com/somerequest";
URL obj = new URL(url);
HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();

//add reuqest header
con.setRequestMethod("POST");
con.setRequestProperty("User-Agent", USER_AGENT);
con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");

String urlParameters = String.format("request=%s", XMLSRequest);

// Send post request
con.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(con.getOutputStream());
wr.writeBytes(urlParameters);
wr.flush();
wr.close();

Question

Is this right way to send String (XML like string) as POST request to the server?


Solution

  • To POST a SOAP request, you would want to write the xml to the body of the request. You do not want to write it as a parameter of the request.

    String url = "https://testurl.com/somerequest";
    URL obj = new URL(url);
    urlConnection con = (HttpsURLConnection) obj.openConnection();
    
    // add request header
    con.setRequestMethod("POST");
    con.setRequestProperty("User-Agent", USER_AGENT);
    con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
    con.setRequestProperty("Content-Type", "application/soap+xml; charset=utf-8");
    
    // Send post request
    con.setDoOutput(true);
    OutputStream os = con.getOutputStream(); //get output Stream from con
    os.write( XMLSRequest.getBytes("utf-8") );
    os.close();