/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.dianping.cosmos.monitor; import java.io.IOException; import java.net.URI; import java.net.URL; import java.util.List; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.params.CoreConnectionPNames; import org.apache.http.util.EntityUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * 向cat写入metric相关信息 * @author xinchun.wang * */ public class HttpClientService { private static final Logger LOGGER = LoggerFactory.getLogger(HttpClientService.class); // private static JSONUtil jsonUtil = JSONUtil.getInstance(); protected String excuteGet(String url, boolean useURI) throws Exception { HttpClient httpClient = getHttpClient(); HttpUriRequest request = getGetRequest(url, useURI); HttpResponse httpResponse = httpClient.execute(request); String response = parseResponse(url, httpResponse); return response; } protected String excutePost(String url, List<NameValuePair> nvps) throws Exception { HttpClient httpClient = getHttpClient(); HttpPost httpPost = new HttpPost(url); httpPost.setEntity(new UrlEncodedFormEntity(nvps)); HttpResponse httpResponse = httpClient.execute(httpPost); String response = parseResponse(url, httpResponse); return response; } private String parseResponse(String url, HttpResponse httpResponse) throws Exception, IOException { int status = httpResponse.getStatusLine().getStatusCode(); if(status != 200){ String errorMsg = "Error occurs in calling acl service: " + url + ", with status:" + status; throw new Exception(errorMsg); } HttpEntity entry = httpResponse.getEntity(); String response = EntityUtils.toString(entry, "UTF-8"); return response; } private HttpClient getHttpClient() { HttpClient httpClient = new DefaultHttpClient(); httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 5000); httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 5000); return httpClient; } private HttpUriRequest getGetRequest(String url, boolean useURI) throws Exception { HttpUriRequest request; if(useURI){ URL requestURL = new URL(url); URI uri = new URI( requestURL.getProtocol(), null, requestURL.getHost(), requestURL.getPort(), requestURL.getPath(), requestURL.getQuery(), null); request = new HttpGet(uri); } else{ request = new HttpGet(url); } return request; } // protected boolean parseResultMap(String response, String url) throws Exception{ // Map<?, ?> result = jsonUtil.formatJSON2Map(response); // if(result == null){ // return false; // } // String code = (String)result.get("statusCode"); // if("-1".equals(code)){ // throw new Exception(String.valueOf(result.get("errorMsg"))); // } // return true; // } public void get(String url) throws Exception{ String response = excuteGet(url, false); if(response == null){ LOGGER.error("call uri error, response is null, uri = " + url); } //parseResultMap(response, url); } public void getByURI(String url) throws Exception{ String response = excuteGet(url, true); if(response == null){ LOGGER.error("call uri error, response is null, uri = " + url); } //parseResultMap(response, url); } }