2012-01-01 91 views
2

我目前正在編寫一個需要發送一個http Post請求到服務器的應用程序。該請求需要包含特定的參數,這些參數在相應的GET請求中將被編碼到url中。但是,http請求的正文需要正確格式化xml服務器將解析。所以,我的理解是,該文件需要被添加到該請求,像這樣:如何使用apache commons HttpPost發送文件併爲請求編碼參數?

httpClient = new DefaultHttpClient(); 
    HttpPost post = new HttpPost("url..."); 
    if (httpContent != null){ 
     InputStreamEntity httpStream = new InputStreamEntity(httpContent,-1); 
     httpStream.setContentType("text/xml"); 
     httpStream.setChunked(true); 

     post.setEntity(httpStream); 
    } 

和參數需要被添加作爲一個名稱 - 值對這樣的:

List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
nameValuePairs.add(new BasicNameValuePair("userid", "12312")); 
nameValuePairs.add(new BasicNameValuePair("sessionid", "234")); 
post.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

現在,我很確定httpPost只能有一個實體集,除非我誤解它。那麼,我怎樣才能設置參數,仍然保留爲http身體的XML?

在此先感謝!

回答

2

不要使用UrlEncodedFormEntity - 這仍然是一個表單實體,並且不會爲您提供您正在查找的「GET請求」等效項。

相反,只是追加到傳遞給HttpPost構造的網址你的參數:

url...?userid=12312&sessionid=234 
+0

我需要在HTTP正文編碼就像一個普通的POST請求的參數。我不想構建一個GET請求。問題是,我沒有看到如何編碼參數,幷包括XML文件。 – brthornbury 2012-01-01 20:31:34

+0

@Mozoby - 我們需要更好地理解您要提交的服務器需要什麼。如果上述操作不起作用,則可能需要使用UrlEncodedFormEntity,並將所有XML作爲具有給定名稱的值。 – ziesemer 2012-01-02 01:38:33

+0

這是正確的,我需要將參數編碼爲GET參數並將XML放入POST主體中。 – brthornbury 2013-02-04 19:12:01

相關問題