本人在使用httpclient作練習的時候,偶然發現京東萬象上有一個免費的頻道新聞調用api,故嘗試之,由於官網文檔只給出的java代碼都是封裝後的,因此我本身寫了一遍,又寫了一些註釋。分享代碼,供你們參考。html
下面是具體的調用代碼:java
public void testDemo() throws JSONException, UnsupportedOperationException, IOException { String url = "https://way.jd.com/jisuapi/get";//設置接口地址 //設置參數 JSONObject jsonObject = new JSONObject(); jsonObject.put("channel", channel[1]); jsonObject.put("num", "5"); jsonObject.put("start", "0"); jsonObject.put("appkey", APPKEY); String uri = changeJsonToArguments(jsonObject);//獲取uri HttpGet get = new HttpGet(url+uri);//建立並實例化get接口 JSONObject response = getHttpResponse(get);//獲取響應 output(response);//輸出相應實體 testOver();//關閉客戶端 }
下面是獲取相應的方法(其中的封裝方法已略去):web
/** * 獲取響應實體 * <p>會自動設置cookie,可是須要各個項目再自行實現cookie管理</p> * <p>該方法只會處理文本信息,對於文件處理能夠調用兩個過時的方法解決</p> * * @param request 請求對象 * @return 返回json類型的對象 */ public static JSONObject getHttpResponse(HttpRequestBase request) { if (!isRightRequest(request)) return new JSONObject(); beforeRequest(request); JSONObject res = new JSONObject(); RequestInfo requestInfo = new RequestInfo(request); if (HEADER_KEY) output("===========request header===========", Arrays.asList(request.getAllHeaders())); long start = Time.getTimeStamp(); try (CloseableHttpResponse response = ClientManage.httpsClient.execute(request)) { long end = Time.getTimeStamp(); long elapsed_time = end - start; if (HEADER_KEY) output("===========response header===========", Arrays.asList(response.getAllHeaders())); int status = getStatus(response, res); JSONObject setCookies = afterResponse(response); String content = getContent(response); int data_size = content.length(); res.putAll(getJsonResponse(content, setCookies)); int code = iBase == null ? -2 : iBase.checkCode(res, requestInfo); // new AlertOver("響應狀態碼錯誤:" + status, "狀態碼錯誤:" + status, requestInfo.getUrl(), requestInfo).sendSystemMessage(); MySqlTest.saveApiTestDate(requestInfo, data_size, elapsed_time, status, getMark(), code, LOCAL_IP, COMPUTER_USER_NAME); } catch (Exception e) { logger.warn("獲取請求相應失敗!", e); if (!SysInit.isBlack(requestInfo.getHost())) new AlertOver("接口請求失敗", requestInfo.toString(), requestInfo.getUrl(), requestInfo).sendSystemMessage(); } finally { HEADER_KEY = false; if (!SysInit.isBlack(requestInfo.getHost())) { if (requests.size() > 9) requests.removeFirst(); boolean add = requests.add(request); } } return res; }
下面是解析響應實體的封裝方法:編程
/** * 根據響應獲取響應實體 * * @param response * @return */ public static String parseResponse(CloseableHttpResponse response) { HttpEntity entity = response.getEntity();// 獲取響應實體 String content = EMPTY; try { content = EntityUtils.toString(entity, DEFAULT_CHARSET);// 用string接收響應實體 EntityUtils.consume(entity);// 消耗響應實體,並關閉相關資源佔用 } catch (Exception e1) { logger.warn("解析響應實體異常!", e1); } return content; }
下面是獲取到的信息:json
{"code":"10000" "charge":false "msg":"查詢成功" "result":{"msg":"ok" "result":{"num":"5" "channel":"新聞" "list":[{"src":"澎湃新聞" "weburl":"http://news.sina.com.cn/c/nd/2017-08-26/doc-ifykiqfe1818402.shtml" "time":"2017-08-26 17:08" "pic":"" "title":"北京市食藥監局:海底撈限期一個月實現後廚公開" "category":"news" "content":"<p class=\"art_p\">原標題:北京市食藥監局:海底撈北京全部門店限期一個月內後廚公開</p><p class=\"art_p\">@北京青年報 官方微博8月26日消息,2017年8月25日,有媒體反映本市「海底撈」勁鬆店、太陽宮店存在經營場所衛生條件存在問題等違規行爲。北京市食藥監局當即對上述兩家門店進行立案調查,並對四川海底撈餐飲股份管理有限公司位於北京地區的1家中央廚房和26家門店開展全面檢查,第一時間責任約談該公司北京地區負責人。</p><p class=\"art_p\">今天下午,北京市食藥監局再次約談「海底撈」北京公司,將本次對「海底撈」全面檢查發現的問題進行通報,問題包括消毒記錄不全、餐飲具混放、未戴工做帽及口罩等,要求「海底撈」總部落實食品安全主體責任,全面進行限期整改,並按照《關於海底撈火鍋北京勁鬆店、北京太陽宮店事件處理通報》中所承諾,主動向社會公開整改狀況,主動接受社會監督。</p><p class=\"art_p\">同時,北京市食藥監局表示,將把上述檢查發現問題的門店記入北京市企業信用信息平臺,並在第二年度餐飲服務單位量化分級中實施減分降級。</p><p class=\"art_p\">此外,要求「海底撈」總部按照承諾對北京各門店實現後廚公開、信息化、可視化,限期一個月完成,同時北京地區負責人可以主動對各門店進行隨時檢查。</p>" "url":"http://news.sina.cn/gn/2017-08-26/detail-ifykiqfe1818402.d.html?cre=tianyi&mod=wnews&loc=9&r=25&doct=0&rfunc=100&tj=none&tr=25"}]} "status":"0"}}