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

时间:2011-10-13 09:36:19

标签: java http post

我需要将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文件。任何人都可以帮助我在我的代码中出错的地方。

2 个答案:

答案 0 :(得分:1)

以下是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();

答案 1 :(得分:0)

您发布的代码存在一些问题。 首先,您只读取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));