1

私の他の質問の複製ではありません。

POST次のようなリクエストを送信しています。

        String urlParameters = "a=b&c=d";
        String request = "http://www.example.com/";

        URL url = new URL(request);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();      
        connection.setDoOutput(true);
        connection.setDoInput(true);
        connection.setInstanceFollowRedirects(false); 
        connection.setRequestMethod("POST");
        connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
        connection.setRequestProperty("charset", "utf-8");
        connection.setRequestProperty("Content-Length", "" + Integer.toString(urlParameters.getBytes().length));
        connection.setUseCaches(false);

        DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
        wr.writeBytes(urlParameters);
        wr.flush();
        wr.close();
        connection.disconnect();

POSTHTTP要求から返された xml 応答を読み取るにはどうすればよいですか? 特に、応答ファイルを .xml ファイルとして保存してから読み取りたいと考えています。私の通常のGETリクエストでは、これを使用します:

    SAXBuilder builder = new SAXBuilder();
    URL website = new URL(urlToParse);
    ReadableByteChannel rbc = Channels.newChannel(website.openStream());
    FileOutputStream fos = new FileOutputStream("request.xml");
    fos.getChannel().transferFrom(rbc, 0, 1 << 24);
    fos.close();
    // Do the work

補遺: 次のコードを使用していますが、問題なく動作します。ただし、スペースや改行は無視され、完全な XML コンテンツが 1 行として扱われます。どうすれば修正できますか?

    InputStream is = connection.getInputStream();
    BufferedReader br = new BufferedReader(new InputStreamReader(is));
    StringBuilder sb1 = new StringBuilder();
    String line;
    while ((line = br.readLine()) != null) {
        sb1.append(line);
    }
    FileOutputStream f = new FileOutputStream("request.xml");
    f.write(sb1.toString().getBytes());
    f.close();
    br.close();
4

2 に答える 2

1

ReadersおよびreadLine()xml データでは使用しないでください。を使用InputStreamsしてbyte[]ください。

于 2013-04-09T00:55:36.273 に答える
1

Pangea のおかげで、彼のコードを修正したところ、これが機能するようになりました。

    TransformerFactory transFactory = TransformerFactory.newInstance();
    Transformer t= transFactory.newTransformer();
    t.setOutputProperty(OutputKeys.METHOD, "xml");
    t.setOutputProperty(OutputKeys.INDENT,"yes");                
    Source input = new StreamSource(is);
    Result output = new StreamResult(new FileOutputStream("request.xml"));
    transFactory.newTransformer().transform(input, output);
于 2013-04-09T01:12:49.137 に答える