2013-08-12 34 views
47

Tôi muốn viết cơ thể của một yêu cầu với XML content-type nhưng tôi không biết làm thế nào với HttpClient Object (http://hc.apache.org/httpclient-3.x/apidocs/index.html)Viết trong yêu cầu cơ thể với HttpClient

DefaultHttpClient httpClient = new DefaultHttpClient(); 
HttpPost httpRequest = new HttpPost(this.url); 
httpRequest.setHeader("Content-Type", "application/xml"); 

Và tôi không biết làm thế nào để tiếp tục viết cơ thể với XML của tôi ...

Trả lời

87

Nếu xml của bạn được viết bởi java.lang.String bạn chỉ có thể sử dụng HttpClient theo cách này

public void post() throws Exception{ 
     HttpClient client = new DefaultHttpClient(); 
     HttpPost post = new HttpPost("http://www.baidu.com"); 
     String xml = "<xml>xxxx</xml>"; 
     HttpEntity entity = new ByteArrayEntity(xml.getBytes("UTF-8")); 
     post.setEntity(entity); 
     HttpResponse response = client.execute(post); 
     String result = EntityUtils.toString(response.getEntity()); 
    } 

phải quan tâm đến các Ngoại lệ.

BTW, ví dụ được viết bởi phiên bản httpclient 4.x

+0

tôi sẽ đề nghị sử dụng 'java .nio.charset.StandardCharsets' và sửa đổi dòng 'ByteArrayEntity' thành: HttpEntity entity = new ByteArrayEntity (xml.getBytes (StandardCharsets.UTF_8)); – MrMister

+0

Thay vì 'mới ByteArrayEntity (xml.getBytes (" UTF-8 "));' sử dụng 'StringEntity mới (xml, ContentType.APPLICATION_XML);' – Asaph

+0

Sử dụng StringEntity mới có thể dẫn đến bộ ký tự không chính xác được khai báo trong tiêu đề. Sử dụng cẩn thận. –

20

Mở rộng mã của bạn (giả định rằng XML mà bạn muốn gửi là trong xmlString):

String xmlString = "</xml>"; 
DefaultHttpClient httpClient = new DefaultHttpClient(); 
HttpPost httpRequest = new HttpPost(this.url); 
httpRequest.setHeader("Content-Type", "application/xml"); 
StringEntity xmlEntity = new StringEntity(xmlString); 
httpRequest.setEntity(xmlEntity); 
HttpResponse httpresponse = httpclient.execute(httppost); 
+0

Xml được viết bởi String :) nhưng cũng cảm ơn bạn! – Tata2

+0

Cảm ơn Santosh, giải pháp của bạn đã làm việc trong trường hợp của tôi .. –

+0

@javadoc, bạn được chào đón. – Santosh

Các vấn đề liên quan