Http客户端在java中发布xml文件

我需要将xml文件发送到以下链接

http://14.140.66.142:80/MSMQ/private$/votes 

这是我的代码。

  URL url = new URL("http://14.140.66.142:80/MSMQ/private$/votes"); URLConnection con = url.openConnection(); String document = "C:\\Documents and Settings\\Nagra\\My Documents\\Responseserver\\workingVoting\\VoteSubmitter\\Body.xml"; FileReader fr = new FileReader(document); // specify that we will send output and accept input con.setDoInput(true); con.setDoOutput(true); char[] buffer = new char[1024*10]; int b_read = 0; if ((b_read = fr.read(buffer)) != -1) { con.setRequestHeader ( "Content-Type", "text/xml" ); con.setRequestProperty("SOAPAction","MSMQMessage"); con.setRequestProperty("Proxy-Accept","NonInteractiveClient" ); con.setRequestProperty("CONNECTION", "close"); con.setRequestProperty("CACHE-CONTROL", "no-cache"); con.setRequestProperty("USER-AGENT", "OpenTV-iAdsResponder_1_0"); OutputStreamWriter writer = new OutputStreamWriter( con.getOutputStream() ); writer.write(buffer, 0, b_read); PrintWriter pw = new PrintWriter(con.getOutputStream()); pw.write(buffer, 0, b_read); pw.close(); System.out.println("written"); } catch( Throwable t ) { t.printStackTrace( System.out ); } } } 

我不知道它是否是正确的代码。如果我运行此代码,我无法在服务器端接收xml文件。任何人都可以帮助我在我的代码中出错的地方。

以下是POST操作示例:

 URL url = new URL("http://14.140.66.142:80/MSMQ/private$/votes"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoOutput(true); connection.setInstanceFollowRedirects(false); connection.setRequestMethod("POST"); connection.setRequestProperty("Content-Type", "application/xml"); OutputStream os = connection.getOutputStream(); TransformerFactory tf = TransformerFactory.newInstance(); Transformer transformer = tf.newTransformer(); FileReader fileReader = new FileReader("C:\\Documents and Settings\\Nagra\\My Documents\\Responseserver\\workingVoting\\VoteSubmitter\\Body.xml"); StreamSource source = new StreamSource(fileReader); StreamResult result = new StreamResult(os); transformer.transform(source, result); os.flush(); connection.getResponseCode(); connection.disconnect(); 

您发布的代码存在一些问题。 首先,您只读取1024 * 10个字符,如果文件中包含更多字符,则不会发送整个文件。 其次,您不止一次地编写内容。 更改类似于此的代码。

 URL url = new URL("http://14.140.66.142:80/MSMQ/private$/votes"); HttpURLConnection con = (HttpURLConnection)url.openConnection(); String document = "C:\\Documents and Settings\\Nagra\\My Documents\\Responseserver\\workingVoting\\VoteSubmitter\\Body.xml"; FileReader fr = new FileReader(document); // specify that we will send output and accept input con.setDoInput(true); con.setDoOutput(true); char[] buffer = new char[1024*10]; int b_read = 0; con.setRequestProperty ( "Content-Type", "text/xml" ); con.setRequestProperty("SOAPAction","MSMQMessage"); con.setRequestProperty("Proxy-Accept","NonInteractiveClient" ); con.setRequestProperty("CONNECTION", "close"); con.setRequestProperty("CACHE-CONTROL", "no-cache"); con.setRequestProperty("USER-AGENT", "OpenTV-iAdsResponder_1_0"); OutputStreamWriter writer = new OutputStreamWriter( con.getOutputStream() ); while ((b_read = fr.read(buffer)) != -1) { writer.write(buffer, 0, b_read); } writer.flush(); writer.close(); fr.close(); int i = con.getResponseCode(); con.disconnect(); System.out.println(String.format("written with response code: %d",i));