在java中发布XML请求

如何使用HTTP POST将XML请求发布到URL并检索响应?

更新对不起,我的问题不明确。 我想知道如何使用HttpClient或URLConnection将XML请求发布到URL,并将响应作为POST参数获取并将其显示在网页中。

以下是如何使用java.net.URLConnection执行此操作的示例:

 String url = "http://example.com"; String charset = "UTF-8"; String param1 = URLEncoder.encode("param1", charset); String param2 = URLEncoder.encode("param2", charset); String query = String.format("param1=%s&param2=%s", param1, param2); URLConnection urlConnection = new URL(url).openConnection(); urlConnection.setUseCaches(false); urlConnection.setDoOutput(true); // Triggers POST. urlConnection.setRequestProperty("accept-charset", charset); urlConnection.setRequestProperty("content-type", "application/x-www-form-urlencoded"); OutputStreamWriter writer = null; try { writer = new OutputStreamWriter(urlConnection.getOutputStream(), charset); writer.write(query); // Write POST query string (if any needed). } finally { if (writer != null) try { writer.close(); } catch (IOException logOrIgnore) {} } InputStream result = urlConnection.getInputStream(); // Now do your thing with the result. // Write it into a String and put as request attribute // or maybe to OutputStream of response as being a Servlet behind `jsp:include`. 

这个例子发布了一个xml文件,它依赖于Jakarta HttpClient API(jakarta.apache.org)

 import java.io.File; import java.io.FileInputStream; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods.InputStreamRequestEntity; import org.apache.commons.httpclient.methods.PostMethod; /** * This is a sample application that demonstrates * how to use the Jakarta HttpClient API. * * This application sends an XML document * to a remote web server using HTTP POST * * @author Sean C. Sullivan * @author Ortwin Glück * @author Oleg Kalnichevski */ public class PostXML { /** * * Usage: * java PostXML http://mywebserver:80/ c:\foo.xml * * @param args command line arguments * Argument 0 is a URL to a web server * Argument 1 is a local filename * */ public static void main(String[] args) throws Exception { if (args.length != 2) { System.out.println( "Usage: java -classpath  [-Dorg.apache.commons."+ "logging.simplelog.defaultlog=]" + " PostXML  ]"); System.out.println(" - must contain the "+ "commons-httpclient.jar and commons-logging.jar"); System.out.println(" - one of error, "+ "warn, info, debug, trace"); System.out.println(" - the URL to post the file to"); System.out.println(" - file to post to the URL"); System.out.println(); System.exit(1); } // Get target URL String strURL = args[0]; // Get file to be posted String strXMLFilename = args[1]; File input = new File(strXMLFilename); // Prepare HTTP post PostMethod post = new PostMethod(strURL); // Request content will be retrieved directly // from the input stream // Per default, the request content needs to be buffered // in order to determine its length. // Request body buffering can be avoided when // content length is explicitly specified post.setRequestEntity(new InputStreamRequestEntity( new FileInputStream(input), input.length())); // Specify content type and encoding // If content encoding is not explicitly specified // ISO-8859-1 is assumed post.setRequestHeader( "Content-type", "text/xml; charset=ISO-8859-1"); // Get HTTP client HttpClient httpclient = new HttpClient(); // Execute request try { int result = httpclient.executeMethod(post); // Display status code System.out.println("Response status code: " + result); // Display response System.out.println("Response body: "); System.out.println(post.getResponseBodyAsString()); } finally { // Release current connection to the connection pool // once you are done post.releaseConnection(); } } } 

使用InputStreamEntity 。 我使用了httpclient 4.2.1

例如:

 HttpPost httppost = new HttpPost(url); InputStream inputStream=new ByteArrayInputStream(xmlString.getBytes());//init your own inputstream InputStreamEntity inputStreamEntity=new InputStreamEntity(inputStream,xmlString.getBytes()); httppost.setEntity(inputStreamEntity); 

警告此代码已有5年以上的历史。 我为这篇文章做了一些修改,从未测试过。 希望它有所帮助。

将XML(数据)发布到服务器并下载resp:

  public int uploadToServer(String data) throws Exception { OutputStream os; URL url = new URL("someUrl"); HttpURLConnection httpConn= (HttpURLConnection) url.openConnection(); os = httpConn.getOutputStream(); BufferedWriter osw = new BufferedWriter(new OutputStreamWriter(os)); osw.write(data); osw.flush(); osw.close(); return httpConn.getResponseCode(); } public String downloadFromServer() throws MalformedURLException, IOException { String returnString = null; StringBuffer sb = null; BufferedInputStream in; //set up httpConn code not included same as previous in = new BufferedInputStream(httpConn.getInputStream()); int x = 0; sb = new StringBuffer(); while ((x = in.read()) != -1) { sb.append((char) x); } in.close(); in = null; if (httpConn != null) { httpConn.disconnect(); } returnString = sb.toString(); return returnString; } 

别的地方…..

 int respCode = uploadToServer(someXmlData); if (respCode == 200) { String respData = downloadFromServer(); }