How to switch from HttpURLConnection to HttpClient

This is my first question, so please bear with me.

I have a Swing application that receives XML data from a server through HttpURLConnection. Now I'm trying to create a permanent connection to the server for request and response, to check if there are any updates for the application (since the check should be performed regularly and often (every second or so).

In some interrogative comment, I read that it would be better to use Apache HttpClient instead of HttpURLConnection to maintain a live connection, but I can not find a good example of how to switch from my current code to using HttpClient. In particular, what to use instead of HttpURLConnection.setRequestProperty () and HttpURLConnection.getOutputStream ()?

Document request = new Document(xmlElement); Document response = new Document(); String server = getServerURL(datasetName); try { URL url = new URL(server); try { HttpURLConnection connection = (HttpURLConnection)url.openConnection(); connection.setRequestProperty("Content-Type","application/xml; charset=ISO-8859-1"); connection.setDoOutput(true); connection.setDoInput(true); connection.setRequestMethod("POST"); OutputStream output = connection.getOutputStream(); XMLOutputter serializer = new XMLOutputter(); serializer.output(request, output); output.flush(); output.close(); InputStream input = connection.getInputStream(); String tempString = ErrOut.printToString(input); SAXBuilder parser = new SAXBuilder(); try { response = parser.build(new StringReader(tempString)); } catch (JDOMException ex) { ... } input.close(); connection.disconnect(); } catch (IOException ex) { ... } } catch (MalformedURLException ex) { ... } 
+4
source share
3 answers

Thanks to Santosh and Ravesh Sharma for your answers. I ended up using StringEntity, and this is what I have now:

 Document request = new Document(xmlElement); Document response = new Document(); XMLOutputter xmlOutputter = new XMLOutputter(); String xml = xmlOutputter.outputString(request); HttpClient client = new DefaultHttpClient(); HttpPost post = new HttpPost(getServerURL(datasetName)); post.setHeader("Content-type", "application/xml; charset=ISO-8859-1"); try { StringEntity se = new StringEntity(xml); se.setContentType("text/xml"); post.setEntity(se); } catch (UnsupportedEncodingException e) { ... } try { HttpResponse httpResponse = client.execute(post); BufferedReader rd = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent())); String line = ""; String tempString = ""; while ((line = rd.readLine()) != null) { tempString += line; } SAXBuilder parser = new SAXBuilder(); try { response = parser.build(new StringReader(tempString)); } catch (JDOMException ex) { ... } } catch (IOException ex) { ... } 
+4
source

I think apache provides all the examples. If you are using httpclient 4, you can refer to this URL http://hc.apache.org/httpcomponents-client-ga/examples.html

Also, you may find this useful .. wrt set the type of response, etc. http://hc.apache.org/httpcomponents-client-ga/tutorial/html/fundamentals.html

+5
source

Here is the snippet you need (this replaces most of the things you have in the try block)

 try { String postURL= server; HttpClient client = new HttpClient(); PostMethod postMethod = new PostMethod(postURL);; client.executeMethod(postMethod); InputStream input = postMethod.getResponseBodyAsStream(); //--your subsequent code here 

EDIT: Here is an example of sending XML to a server Using Http-Client.

+3
source

Source: https://habr.com/ru/post/1386704/


All Articles