2011-03-29 48 views
0

我需要一些XML發送到Web服務,我能夠與正常StringEntity這樣做,因爲它只是文字,但現在我需要的圖像附加到它。我試着用MultipartEntity做這件事,但是我不能用它來處理XML。MultipartEntity沒有創造良好的請求

//工作

DefaultHttpClient httpclient = new DefaultHttpClient(); 
HttpPost httppost doc = new HttpPost("http://mywebservices.com"); 

HttpEntity entity = new StringEntity(writer.toString()); 
httppost.setEntity(entity); 

HttpResponse response = httpclient.execute(httppost); 
HttpEntity responseEntity = response.getEntity(); 

//不工作

DefaultHttpClient httpclient = new DefaultHttpClient(); 
HttpPost httppost doc = new HttpPost("http://mywebservices.com"); 

// no difference when removing the BROWSER_COMPATIBLE 
MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); 
entity.addPart("xml", new StringBody(writer.toString())); 
httppost.setEntity(entity); 

HttpResponse response = httpclient.execute(httppost); 
HttpEntity responseEntity = response.getEntity(); 

,是有辦法,我可以看到正在發送的MIME?

回答

4

你根本忘了:

httppost.setEntity(entity); 

順便說一句,這是件好事形式來設置部件的內容類型,如:

entity.addPart("xml", new StringBody(writer.toString(),"application/xml",Charset.forName("UTF-8"))); 

至於看到東西被髮送到了什麼,請參閱HttpClient的日誌記錄功能http://hc.apache.org/httpcomponents-client-ga/logging.html(尤其是「絲日誌」),並 this question如何得到它在Android上工作。

+0

哦我看到我忘了複製'httppost.setEntity(實體);',它在我的代碼,但沒有工作:( – 2011-03-29 17:34:34

+0

嗯,你說這是行不通的,究竟是什麼出了問題 – 2011-03-30 20:35:49

+0

web服務是?無法讀取請求並給我一個錯誤,所以'MultipartEntity'產生的另一個帖子比正常的'HttpEntity',但我無法看到帖子。 – 2011-03-31 07:55:46

1

另一種方式看東西被髮送到了什麼是建立自己的「服務器」接收請求。你可以在一個類似於Unix的系統上使用netcat來做到這一點。命令行

nc -l 1234 

啓動一個偵聽端口1234的服務器,並將迴應接收到的任何內容。

如果「服務器」是一臺機器10.1.2.3上,你可以只使用一個new HttpPost("http://10.1.2.3:1234")那裏發送郵件。

+0

哇,這是非常有用的 – 2011-04-02 15:12:52

+0

有點此外,如果你想這樣做在Windows上,你可以在這裏下載http://www.securityfocus.com/tools/139和NetCat的,你應該像這樣運行它。 'C:\ path \ to \ nc.exe -l -p 1234' – 2011-08-02 08:53:44

0

我有一個類似的問題,但我將與用戶的multipart /傳遞給Acegi安全系統,其工作原理與此:

request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); 

但不與本:

try { 
    for (NameValuePair param : params) { 
     multientity.addPart(param.getName(), new StringBody(param.getValue(),  Charset.forName(encoding)))); 
    } 
    request.setEntity(multientity); 
} 
+0

您意味着問題的答案是第一塊代碼? – Alfabravo 2015-01-09 16:34:18