如何使用HTTP POST將XML請求發佈到URL並檢索響應?在java中發佈XML請求
更新對不起,我的問題不清楚,我猜。我想知道如何使用HttpClient或URLConnection向URL發佈XML請求,並將響應作爲POST參數獲取並顯示在網頁中。
如何使用HTTP POST將XML請求發佈到URL並檢索響應?在java中發佈XML請求
更新對不起,我的問題不清楚,我猜。我想知道如何使用HttpClient或URLConnection向URL發佈XML請求,並將響應作爲POST參數獲取並顯示在網頁中。
這個例子發佈一個XML文件,它依賴於雅加達的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 <classpath> [-Dorg.apache.commons."+
"logging.simplelog.defaultlog=<loglevel>]" +
" PostXML <url> <filename>]");
System.out.println("<classpath> - must contain the "+
"commons-httpclient.jar and commons-logging.jar");
System.out.println("<loglevel> - one of error, "+
"warn, info, debug, trace");
System.out.println("<url> - the URL to post the file to");
System.out.println("<filename> - 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();
}
}
}
下面是一個例子,如何用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¶m2=%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`.
警告這個代碼是5歲以上。我爲這篇文章做了一些修改,從未測試過。 希望它有幫助。
郵政XML(數據)到服務器並downlod的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();
}
使用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);
使用的是什麼? httpclient,URLConnection?什麼 - 一個網頁,一個Web服務?你的問題不清楚。 – Bozho 2010-04-29 08:39:04
對不起..無論是httpclient或URLConnection ..我需要在網頁中顯示響應.. – shil 2010-04-29 08:43:49
更新與這些細節的問題。並給予更多 - 目標網頁是什麼,它是如何期待XML。作爲典型的發佈參數? – Bozho 2010-04-29 08:46:37