標籤:httpclient
兩個問題: 1、httpclient如何發送一個沒有任何參數的post資料呢? 2、Web工程如何去接收一個無參數的post呢?
起因: 今天(2014.11.10)在開發中碰到了一個問題,介面提供方提供的介面是要求使用post方式發送資料的,心想這不超簡單的一個東西嗎?直接post過去不就是了,但是,提供的介面是沒有任何參數的,不是類似這種http://api.dutycode.com/data/parm=xxx這種介面,而是http://api.dutycode.com/data。這個地址直接接收post資料。 話說,當時瞬間心碎了,沒接觸過啊。。。。 但是,總歸是有解決辦法的,既然有這樣的介面來接收資料,那麼一定可以發送so
解決辦法:很簡單 實現代碼如下:
public static void main(String[] args) throws Exception { HttpClient client = HttpClients. createDefault(); HttpPost post = new HttpPost("http://127.0.0.1/report/testPost" ); //組裝一個 json串,用於發送 JSONObject jsonObj = new JSONObject(); jsonObj.put( "website" , "http://www.dutycode.com" ); jsonObj.put( "email" , "[email protected]" ); StringEntity entity = new StringEntity(jsonObj.toJSONString()); entity.setContentEncoding( "UTF-8" ); entity.setContentType( "application/json" );//設定為 json資料 post.setEntity(entity); HttpResponse response = client.execute(post); HttpEntity resEntity = response.getEntity(); String res = EntityUtils. toString(resEntity); System. out .println(res); } |
問題2 Web工程如何去接收一個無參數的post呢?
既然能發送,那麼得想辦法實現服務端啊,要不然怎麼才能死心。
so 測試代碼:(注,使用公司內部架構實現,但基本原理是一樣的)
@Path ("testPost" ) public ActionResult getpost() throws Exception{ StringBuilder sb = new StringBuilder (); InputStream is = getRequest().getInputStream(); BufferedInputStream bis = new BufferedInputStream(is); byte [] buffer = new byte[1024]; int read = 0; while ((read=bis.read(buffer)) != -1){ sb.append( new String(buffer, 0, read, "UTF-8" )); } System. out .println(sb.toString()); return outputStream("{msg:success}" );} |
原理很簡單,直接擷取到post過來的所有資料流
上面兩個結合起來一起測試的話,結果如下: 第一段代碼返回結果:
第二段代碼返回結果:
{"email":"[email protected]","website":"http://www.dutycode.com"} |
著作權:《攀爬蝸牛》 => 《httpclient發送無參數的post資料》
本文地址:http://www.dutycode.com/post-76.html
除非註明,文章均為 《攀爬蝸牛》 原創,歡迎轉載!轉載請註明本文地址,謝謝
httpclient發送無參數的post資料