2011-04-20 103 views
0

嘿, 我想用xml主體發佈一個http請求。 這是我的代碼:在Java中發送HTTP POST請求的問題

public void setBla(String url, String cookie, SomeEnum status) { 
    String availabilityUrl = url; 
    HttpPost httpPost = new HttpPost(availabilityUrl + VERSION_TEXT); 
    httpPost.setHeader(HttpHeaders.AUTHORIZATION, LP_AUTH_HEADER_VALUE); 
    httpPost.setHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_XML); 
    httpPost.setHeader("X-HTTP-Method-Override", HttpMethod.PUT); 
    httpPost.setHeader("Cookie", cookie); 
    httpPost.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_XML); 
    HttpResponse response = null; 

    try { 
     HttpEntity entity = new StringEntity("<availability><chat>" + status + "</chat></availability>", HTTP.UTF_8); 
     httpPost.setEntity(entity); 
     response = m_httpClient.execute(httpPost); 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

即時得到從應用服務器(400)錯誤請求,並在調試我可以看到HttpEntity也有ContentType標頭和它設置爲text/plain的... 爲什麼呢? 我在做什麼錯? 什麼是正確的方式發送請求與身體?

SOLUTION:

OK ..我得到了它.. 謝謝skaffman,這是非常接近:) AbstractHttpEntity聲明的setContentType功能...

對不起,打擾..

Udi

+0

值得一提的是,您正在使用Apache http客戶端庫(以及哪個版本)。 – 2011-04-20 13:09:40

回答

2

假設這是HttpClient 4.1,那麼對於StringEntity您沒有使用適當的構造函數,您可能需要指定MIME類型以及字符et,例如

HttpEntity entity = new StringEntity(xmlString, "application/xml", HTTP.UTF_8); 

請參閱javadoc