PostMethod HttpPost HttpClient - публикация xml с параметрами URL

Есть ли способ в Java для публикации XML с использованием PostMethod или HttpPost вместе с параметрами URL? Я делаю что-то вроде ниже, но это не работает.

URL - https://mytest.com?z=123&b=abc&c=%10

xml - <test>
        <data> This is test XML </data>
      </test>

public String getResponse(String xml) {

HttpClient client = new HttpClient();
// "https://mytest.com?z=123&b=abc&c=%10"
String url="https://mytest.com";
PostMethod pMethod = new pMethod(url);
pMethod.addParameter("z","123");
pMethod.addParameter("b","abc");
pMethod.addParameter("c","%10");
post.setRequestEntity(new StringRequestEntity(xml, "application/xml", "UTF-8"));
client.executeMethod(pMethod);
}

3 ответа

Я бы предложил вам использовать REST-клиент для выполнения HTTP POST. Кроме того, вы должны передавать свой XML в теле POST, а не в качестве параметра URL (проблемы с кодировкой URL).

Простой пример размещения JSON можно найти здесь

Думаю, я неправильно понял ваш вопрос в первый раз. Вы хотите передать XML как параметр URL, но делаете это через POST, а не просто включаете XML непосредственно в URL? Вы можете сделать это так:

import java.net.URL;
import java.net.HttpURLConnection;
import java.net.URLEncoder;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;

public class XMLPoster {
    public static void main(String[] argv) {
        try {
            String XMLData = argv[0];
            URL url = new URL("http://posttestserver.com/post.php");
            String myParam = "myparam=" + URLEncoder.encode(XMLData, "UTF-8");
            HttpURLConnection httpConn = (HttpURLConnection)url.openConnection();
            httpConn.setRequestMethod("POST");
            httpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            httpConn.setRequestProperty("Content-Length", Integer.toString(myParam.length()));
            httpConn.setDoOutput(true);

            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter((httpConn.getOutputStream())));
            writer.write(myParam, 0, myParam.length());
            writer.flush();
            writer.close();

            System.out.println(httpConn.getResponseCode());
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

Тогда, если вы запустите это:

$ java -cp . XMLPoster '<ThisXMLisFake>But how do you know?</ThisXMLisFake>'
200

и найдите соответствующий файл на posttestserver.com, он должен содержать это, что, как мы надеемся, вам нужно:

Post Params:
key: 'myparam' value: '<ThisXMLisFake>But how do you know?</ThisXMLisFake>'
Empty post body.

Upload contains PUT data:
myparam=%3CThisXMLisFake%3EBut+how+do+you+know%3F%3C%2FThisXMLisFake%3E

Вы можете сделать это с помощью встроенных в Java вещей, например:

import java.net.URL;
import java.net.HttpURLConnection;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;

public class XMLPoster {
    public static void main(String[] argv) {
        try {
            String XMLData = argv[0];
            URL url = new URL("http://posttestserver.com/post.php");
            HttpURLConnection httpConn = (HttpURLConnection)url.openConnection();
            httpConn.setRequestMethod("POST");
            httpConn.setRequestProperty("Content-Type", "application/xml; charset=utf-8");
            httpConn.setRequestProperty("Content-Length", Integer.toString(XMLData.length()));
            httpConn.setDoOutput(true);

            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter((httpConn.getOutputStream())));
            writer.write(XMLData, 0, XMLData.length());
            writer.flush();
            writer.close();

            System.out.println(httpConn.getResponseCode());
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

Этот код, конечно, только пример и не выполняет проверку ошибок и т. Д.

Другие вопросы по тегам