java Http客户端在java中发布xml文件
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/7752157/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Http client Post xml file in java
提问by bharathi
I need to send a xml file to the following link\
我需要发送一个 xml 文件到以下链接\
http://14.140.66.142:80/MSMQ/private$/votes
This is my code.
这是我的代码。
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 );
}
}
}
I don't Know whether it is right code.If i run this code I am not able to receive the xml file on the server side.Can anyone help me where i gone wrong in my code.
我不知道它是否是正确的代码。如果我运行此代码,我将无法在服务器端接收 xml 文件。谁能帮助我,我的代码哪里出错了。
回答by bdoughan
Below is a sample POST operation:
下面是一个示例 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();
回答by Prem
There are a couple of issues with the code you have posted. First, you are reading only 1024*10 characters and you are not sending the whole file if the file has more characters. Second, you are writing the content more than once. Change the code something similar to this.
您发布的代码存在一些问题。首先,您只读取 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));