1.使用HttpClient发送请求、接收响应很简单,一般需要如下几步即可。
1. 创建HttpClient对象。
2. 创建请求方法的实例,并指定请求URL。如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。
3. 如果需要发送请求参数,可调用HttpGet、HttpPost共同的setParams(HetpParams params)方法来添加请求参数;对于HttpPost对象而言,也可调用setEntity(HttpEntity entity)方法来设置请求参数。
4. 调用HttpClient对象的execute(HttpUriRequest request)发送请求,该方法返回一个HttpResponse。
5. 调用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头;调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。
6. 释放连接。无论执行方法是否成功,都必须释放连接
demo:
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.ParseException; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.utils.URIUtils; import org.apache.http.client.utils.URLEncodedUtils; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.log4j.Logger; import com.mangocity.ziwoyou.bean.View; import com.mangocity.ziwoyou.bean.ViewInfo; public class ZiWoYouBaseService { protected final Logger log = Logger.getLogger(getClass()); private String custId = null; private String apikey = null; private String serverHost = null; public String call (Map<String , String> bodyMap,String serviceName) throws Exception { String responseData = null; Map<String,String> map=new HashMap<String,String>(); map.put("custId", getCustId()); map.put("apiKey", getApikey()); map.put("serverHost", getServerHost()); map.put("serviceName", serviceName); responseData = get(bodyMap , map); System.out.println("响应json:\n"+responseData); return responseData; } /** * 发送 get请求 */ public static String get(Map<String , String> bodyMap, Map<String,String> map) { HttpClient httpclient = new DefaultHttpClient(); String responseContent = null; BufferedReader in = null; try { String custId = map.get("custId"); String apikey = map.get("apikey"); String serverHost = map.get("serverHost"); String serviceName = map.get("serviceName"); List<NameValuePair> qparams = dealRequestBody(bodyMap, custId, apikey); HttpResponse response = sendGet(httpclient, serverHost, serviceName, qparams); in = new BufferedReader(new InputStreamReader(response.getEntity() .getContent())); StringBuffer sb = new StringBuffer(""); String line = ""; while ((line = in.readLine()) != null) { sb.append(line); } in.close(); responseContent = sb.toString(); System.out.println(responseContent); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (ParseException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (URISyntaxException e) { e.printStackTrace(); } finally{ try{ if(in!=null){ in.close(); } } catch(IOException ex){ ex.printStackTrace(); } } return responseContent; } /** * 发送http get请求 * @param httpclient * @param serverHost * @param serviceName * @param qparams * @return * @throws URISyntaxException * @throws IOException * @throws ClientProtocolException */ private static HttpResponse sendGet(HttpClient httpclient, String serverHost, String serviceName, List<NameValuePair> qparams) throws URISyntaxException, IOException, ClientProtocolException { URI uri = URIUtils.createURI("http", serverHost, -1, serviceName,URLEncodedUtils.format(qparams, "UTF-8"), null); HttpGet httpget = new HttpGet(); httpget.setURI(uri); System.out.println(httpget.getURI()); HttpResponse response = httpclient.execute(httpget); return response; } /** * 处理请求参数 * @param bodyMap * @param custId * @param apikey * @return */ private static List<NameValuePair> dealRequestBody( Map<String, String> bodyMap, String custId, String apikey) { List<NameValuePair> qparams = new ArrayList<NameValuePair>(); qparams.add(new BasicNameValuePair("custId", custId)); qparams.add(new BasicNameValuePair("apikey", apikey)); Iterator<Map.Entry<String, String>> iter = bodyMap.entrySet().iterator(); while(iter.hasNext()){ Entry<String , String> entry = iter.next(); String key = entry.getKey(); String value = entry.getValue(); qparams.add(new BasicNameValuePair(key, value)); } return qparams; } public String getApikey() { return apikey; } public void setApikey(String apikey) { this.apikey = apikey; } public String getCustId() { return custId; } public void setCustId(String custId) { this.custId = custId; } public String getServerHost() { return serverHost; } public void setServerHost(String serverHost) { this.serverHost = serverHost; } public static void main(String[] args) { Map bodyMap = new HashMap(); Map map = new HashMap(); map.put("custId", "***"); map.put("apikey", "********"); map.put("serverHost", "*******"); map.put("serviceName", "****"); bodyMap.put("cityName", "北京,上海,广州"); bodyMap.put("limit", "5"); String responseData = get(bodyMap , map);//获取到的数据为xml ParseUtil<View> imageListDataParseUtil = new ParseUtil<View>();//转换xml数据 View view = imageListDataParseUtil.xmlToObject(responseData,View.class); for (ViewInfo vi : view.getViews()) { System.out.println(vi.getCityName()); } } }
参考链接:https://svn.apache.org/repos/asf/httpcomponents/httpclient/tags/4.1.1/httpclient-contrib/docs/translated-tutorial/httpclient-tutorial-simplified-chinese.pdf