最近想抓取网页于是想到httpclient,在网上找了一番,全都是commons-httpclient,并且试用后都是有问题。于是去apache官网找httpclient,发觉该项目已经独立了最新是httpclient-4.3.6。参考官网例子实现成功了,记录下
String url = "http://www.tool7001.com/IDCodeGenerate.aspx"; Map<String, String> params = new HashMap<String, String>() { private static final long serialVersionUID = 1L; { put("p", "北京市"); put("c", "市辖区"); put("r", "东城区"); put("y", "2015"); put("m", "1"); put("d", "1"); put("g", "1"); put("n", "10"); } }; Map<String, String> headerMap = new HashMap<String, String>() { private static final long serialVersionUID = 1L; { put("Referer", "http://www.tool7001.com"); } }; NameValuePair[] parametersBody = new NameValuePair[params.size()]; int i = 0; for (Map.Entry<String, String> entry : params.entrySet()) { parametersBody[i] = new BasicNameValuePair(entry.getKey(), entry.getValue()); i++; } Header[] headers = new Header[headerMap.size()]; i = 0; for (Map.Entry<String, String> entry : headerMap.entrySet()) { headers[i] = new BasicHeader(entry.getKey(), entry.getValue()); i++; } CloseableHttpClient httpclient = HttpClients.createDefault(); try { HttpPost httpPost = new HttpPost(url); List<? extends NameValuePair> parameters = Arrays.asList(parametersBody); HttpEntity entity = new UrlEncodedFormEntity(parameters, "UTF-8"); httpPost.setEntity(entity); httpPost.setHeaders(headers); System.out.println("Executing request " + httpPost.getURI()); CloseableHttpResponse response = httpclient.execute(httpPost); try { System.out.println("----------------------------------------"); System.out.println(response.getStatusLine()); System.out.println(StringUtils.join(IOUtils.readLines(response.getEntity().getContent()), "\n")); httpPost.abort(); } finally { response.close(); } } finally { httpclient.close(); }