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();
}
}
}
Этот код, конечно, только пример и не выполняет проверку ошибок и т. Д.