httpclient案例二(调用百度地图的接口)

一,class T

假如你现在还在为自己的技术担忧,假如你现在想提升自己的工资,假如你想在职场上获得更多的话语权,假如你想顺利的度过35岁这个魔咒,假如你想体验BAT的工作环境,那么现在请我们一起开启提升技术之旅吧,详情请点击http://106.12.206.16:8080/qingruihappy/index.html

 1 package com.http.test;
 2 
 3 import org.junit.Test;
 4 
 5 import com.http.BaiduMapProxyService;
 6 import com.http.BaiduMapService;
 7 
 8 public class T {
 9     
10     /**
11      * 测试插入数据
12      */
13     @Test
14     public void testInsert(){
15         BaiduMapService baiduMapService= new BaiduMapService();
16         //随便写的经纬度
17         baiduMapService.insertLocation("武汉纺织大学5号宿舍楼", "116.428415", "39.927109", "北京");
18     }
19     
20     /**
21      * 测试获得数据
22      */
23     @Test
24     public void testGet(){
25         BaiduMapService baiduMapService= new BaiduMapService();
26         baiduMapService.findNearBySchool("116.428415", "39.927109");
27     }
28     
29     /**
30      * 代理测试插入数据
31      */
32     @Test
33     public void testProxyInsert(){
34         BaiduMapProxyService baiduMapService= new BaiduMapProxyService();
35         
36         //随便写的经纬度
37         baiduMapService.insertLocation("武汉纺织大学5号宿舍楼", "116.428415", "39.927109", "北京");
38     }
39     
40     /**
41      * 测试获得数据
42      */
43     @Test
44     public void testProxyGet(){
45         BaiduMapProxyService baiduMapService= new BaiduMapProxyService();
46         baiduMapService.findNearBySchool("116.428415", "39.927109");
47     }
48 }

 

 二,request

  1 package com.http;
  2 
  3 import java.util.Arrays;
  4 import java.util.LinkedHashMap;
  5 import java.util.Map;
  6 
  7 /**
  8  * Requst分装类,封装一些信息
  9  * 作者:Administrator<br>
 10  * 版本:1.0<br>
 11  * 创建日期:下午9:24:43<br>
 12  */
 13 public class Request {
 14     
 15     
 16     /**请求属性*/
 17     private Map<String, String> properties;
 18     
 19     /**请求参数*/
 20     private Map<String, String> params ;
 21     
 22     /**请求头部*/
 23     private Map<String, String> headers;
 24     
 25     private byte[] postData;
 26     
 27     /**是否同步*/
 28     private boolean sync=false;
 29 
 30     
 31     /**
 32      * 获得设置的属性
 33      * @param property
 34      * @return
 35      */
 36     public String getProperty(String property) {
 37         if(properties ==null){
 38             return null;
 39         }
 40         return properties.get(property);
 41     }
 42 
 43     /**
 44      * 设置属性
 45      * @param propery
 46      * @param value
 47      */
 48     public void setProperty(String propery,String value) {
 49         if(properties==null){
 50             properties = new LinkedHashMap<String, String>();
 51         }
 52         properties.put(propery, value);
 53     }
 54 
 55     
 56     /**
 57      * 设置参数
 58      * @param params
 59      */
 60     public void setParam(String param,String value) {
 61         if(params==null){
 62             params = new LinkedHashMap<String, String>();
 63         }
 64         params.put(param, value);
 65     }
 66 
 67     public Map<String, String> getHeaders() {
 68         return headers;
 69     }
 70 
 71     /**
 72      * 设置头部信息
 73      * @param header
 74      * @param value
 75      */
 76     public void setHeader(String header, String value) {
 77         if (headers == null) {
 78             headers = new LinkedHashMap<String, String>();
 79         }
 80         headers.put(header, value);
 81     }
 82 
 83     public Map<String, String> getParams() {
 84         return params;
 85     }
 86 
 87     public String getHeader(String header) {
 88         if (headers == null) {
 89             return null;
 90         }
 91         return headers.get(header);
 92     }
 93     public Map<String, String> getProperties() {
 94         return properties;
 95     }
 96 
 97     public void setProperties(Map<String, String> properties) {
 98         this.properties = properties;
 99     }
100 
101     public void setParams(Map<String, String> params) {
102         this.params = params;
103     }
104 
105     public void setHeaders(Map<String, String> headers) {
106         this.headers = headers;
107     }
108 
109     
110 
111     public byte[] getPostData() {
112         return postData;
113     }
114 
115     public void setPostData(byte[] postData) {
116         this.postData = postData;
117     }
118 
119     public boolean isSync() {
120         return sync;
121     }
122 
123     public void setSync(boolean sync) {
124         this.sync = sync;
125     }
126 
127     
128     
129     
130     
131 }

 

三,response

 1 package com.http;
 2 
 3 import java.util.LinkedHashMap;
 4 import java.util.Map;
 5 
 6 /**
 7  * 响应类
 8  * 作者:Administrator<br>
 9  * 版本:1.0<br>
10  * 创建日期:下午9:36:03<br>
11  */
12 public class Response {
13     
14     /**响应码*/
15     private int statusCode ;
16     
17     /**响应内容*/
18     private byte[] content ;
19     
20     /**响应头部*/
21     private Map<String, String> headers;
22     
23     /**
24      * 设置响应头
25      * 
26      * @param name
27      * @param value
28      */
29     public void setHeader(String name, String value) {
30         if (headers == null) {
31             headers = new LinkedHashMap<String, String>();
32         }
33         headers.put(name, value);
34     }
35     
36     /**
37      * 按指定编码获得响应内容,有些响应乱码了 需要解决乱码问题
38      * @param encoding
39      * @return
40      */
41     public String getContentString(String encoding) {
42         try {
43             String contentString = new String(getContent(), encoding);
44             return contentString;
45         } catch (Exception e) {
46             System.out.println("不支持编码");
47         }
48         return null;
49     }
50 
51     public int getStatusCode() {
52         return statusCode;
53     }
54 
55     public void setStatusCode(int statusCode) {
56         this.statusCode = statusCode;
57     }
58 
59     public byte[] getContent() {
60         return content;
61     }
62 
63     public void setContent(byte[] content) {
64         this.content = content;
65     }
66 
67     public Map<String, String> getHeaders() {
68         return headers;
69     }
70 
71     public void setHeaders(Map<String, String> headers) {
72         this.headers = headers;
73     }
74     
75     
76 }

 

四,BaiduMapService

 

 1 package com.http;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 import org.apache.http.NameValuePair;
 7 import org.apache.http.message.BasicNameValuePair;
 8 
 9 
10 /**
11  * 
12  * title:百度地图服务类 <br>
13  * 版权: Copyright (c) 2011-2016<br>
14  * 
15  * @author:Administrator<br>
16  * @date:Apr 7, 2016<br>
17  */
18 public class BaiduMapService {
19 
20     /**
21      * 请求发送类
22      */
23     private  HttpClientUtil httpClientUtil=new HttpClientUtil();
24     
25     public String insertLocation(String title, String longitude,
26             String latitude, String address) {        
27         //插入数据接口
28         String url = "http://api.map.baidu.com/geodata/v3/poi/create";
29         Request request=new Request();
30         //数据
31         request.setProperty("url", url);
32         request.setProperty("method", "post");        
33         //我自己的百度云数据库名称
34         request.setParam("geotable_id", "137287");
35         request.setParam("ak", "GShGXR4uNroTq4mzqsf1v7h3VgsC3aIk");
36         request.setParam("latitude", latitude);
37         request.setParam("longitude", longitude);
38         request.setParam("address", address);
39         request.setParam("coord_type", "3");        
40         request.setParam("title", title);
41         
42         Response response;
43             try {
44                 response = httpClientUtil.sendRequest(request);
45                 if(response==null||response.getStatusCode()!=200){
46                     return null;
47                 }
48                 String content =response.getContentString("utf-8");
49                 System.out.println("返回的数据是:"+StringUtils.decodeUnicode(content));
50                 return content;
51             } catch (Exception e) {
52                 // TODO Auto-generated catch block
53                 e.printStackTrace();
54             }
55             
56         return null;
57 
58     }
59 
60     /**
61      * 根据经纬度查周边学校半径500米
62      * 
63      * @return
64      */
65     public String findNearBySchool(String longitude, String latitude) {
66         String url = "http://api.map.baidu.com/geosearch/v3/nearby?geotable_id=137287&ak=GShGXR4uNroTq4mzqsf1v7h3VgsC3aIk&radius=500&location="
67                 + longitude + "," + latitude;
68         
69         
70         
71         Request request=new Request();
72         request.setProperty("url", url);
73         request.setProperty("method", "get");
74         
75         Response response=new Response();
76         
77         try {
78             response = httpClientUtil.sendRequest(request);
79             if(response==null||response.getStatusCode()!=200){
80                 return null;
81             }
82             
83             String content =response.getContentString("utf-8");
84             System.out.println("返回的数据是:"+StringUtils.decodeUnicode(content));
85             return content;
86         } catch (Exception e) {
87             // TODO Auto-generated catch block
88             e.printStackTrace();
89         }
90         return null;
91 
92     }
93 }

 

五,HttpClientUtil 

  1 package com.http;
  2 
  3 import java.io.ByteArrayOutputStream;
  4 import java.io.EOFException;
  5 import java.io.IOException;
  6 import java.io.InputStream;
  7 import java.io.InterruptedIOException;
  8 import java.io.UnsupportedEncodingException;
  9 import java.net.SocketException;
 10 import java.net.URI;
 11 import java.net.URISyntaxException;
 12 import java.net.UnknownHostException;
 13 import java.security.KeyManagementException;
 14 import java.security.NoSuchAlgorithmException;
 15 import java.security.cert.X509Certificate;
 16 import java.util.ArrayList;
 17 import java.util.List;
 18 import java.util.Map;
 19 import java.util.Map.Entry;
 20 import java.util.regex.Matcher;
 21 import java.util.regex.Pattern;
 22 import java.util.zip.GZIPInputStream;
 23 
 24 import javax.net.ssl.SSLContext;
 25 import javax.net.ssl.SSLException;
 26 import javax.net.ssl.SSLHandshakeException;
 27 import javax.net.ssl.TrustManager;
 28 import javax.net.ssl.X509TrustManager;
 29 
 30 import org.apache.commons.io.IOUtils;
 31 import org.apache.commons.lang.StringUtils;
 32 import org.apache.http.Header;
 33 import org.apache.http.HttpEntity;
 34 import org.apache.http.HttpEntityEnclosingRequest;
 35 import org.apache.http.HttpHost;
 36 import org.apache.http.HttpRequest;
 37 import org.apache.http.HttpResponse;
 38 import org.apache.http.NameValuePair;
 39 import org.apache.http.NoHttpResponseException;
 40 import org.apache.http.ParseException;
 41 import org.apache.http.ProtocolException;
 42 import org.apache.http.client.ClientProtocolException;
 43 import org.apache.http.client.CookieStore;
 44 import org.apache.http.client.HttpRequestRetryHandler;
 45 import org.apache.http.client.config.CookieSpecs;
 46 import org.apache.http.client.config.RequestConfig;
 47 import org.apache.http.client.config.RequestConfig.Builder;
 48 import org.apache.http.client.entity.UrlEncodedFormEntity;
 49 import org.apache.http.client.methods.CloseableHttpResponse;
 50 import org.apache.http.client.methods.HttpGet;
 51 import org.apache.http.client.methods.HttpPost;
 52 import org.apache.http.client.protocol.HttpClientContext;
 53 import org.apache.http.conn.ConnectTimeoutException;
 54 import org.apache.http.conn.HttpHostConnectException;
 55 import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
 56 import org.apache.http.cookie.Cookie;
 57 import org.apache.http.entity.ByteArrayEntity;
 58 import org.apache.http.impl.client.BasicCookieStore;
 59 import org.apache.http.impl.client.CloseableHttpClient;
 60 import org.apache.http.impl.client.DefaultRedirectStrategy;
 61 import org.apache.http.impl.client.HttpClientBuilder;
 62 import org.apache.http.impl.client.HttpClients;
 63 import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
 64 import org.apache.http.message.BasicNameValuePair;
 65 import org.apache.http.protocol.HttpContext;
 66 import org.apache.http.util.ByteArrayBuffer;
 67 import org.apache.http.util.EntityUtils;
 68 
 69 /**
 70  * HttpClient工具封装类,Post,Get请求,代理请求
 71  * 作者:<br>
 72  * 版本:1.0<br>
 73  * 创建日期:下午9:21:00<br>
 74  */
 75 public class HttpClientUtil {
 76     
 77     /***连接超时时间*/
 78     private Integer connectTimeout =60*1000;
 79     
 80     private Integer socketTimeout =180*1000;
 81     private CloseableHttpClient httpClient = null;
 82     
 83     private CookieStore cookieStore = new  BasicCookieStore();
 84 
 85     
 86     /** 代理请求 */
 87     public HttpClientUtil(String proxyHost, int proxyPort) {
 88         this(proxyHost, proxyPort, -1, -1, 0, 0, true);
 89     }
 90 
 91     /** 默认*/
 92     public HttpClientUtil() {
 93         this(null, 0, -1, -1, 0, 0, true);
 94     }
 95 
 96     /** 进行请求无代理设置连接时间  */
 97     public HttpClientUtil(int socketTimeout, int connectTimeout) {
 98         this(null, 0, socketTimeout, connectTimeout, 0, 0, true);
 99     }
100 
101     
102     /**
103      * 
104      * @param proxyHost  代理主机地址
105      * @param proxyPort  代理端口
106      * @param socketTimeout
107      * @param connectTimeout
108      * @param route  
109      * @param maxTotal
110      * @param followRedirect
111      */
112     public HttpClientUtil(String proxyHost, int proxyPort, int socketTimeout, int connectTimeout, int route, int maxTotal, boolean followRedirect){
113         Builder builder = RequestConfig.custom();
114         builder.setCookieSpec(CookieSpecs.BROWSER_COMPATIBILITY);
115         if (followRedirect) {
116             builder.setCircularRedirectsAllowed(true);
117             builder.setMaxRedirects(100);
118         }
119         if (StringUtils.isNotBlank(proxyHost) && proxyPort > 0) {
120             builder.setProxy(new HttpHost(proxyHost, proxyPort));
121         }
122         
123         //设置连接时间
124         if (socketTimeout != -1) {
125             this.socketTimeout = socketTimeout;
126         }
127         builder.setSocketTimeout(this.socketTimeout);
128         
129         if (connectTimeout != -1) {
130             this.connectTimeout = connectTimeout;
131         }
132         builder.setConnectTimeout(this.connectTimeout);
133         builder.setConnectionRequestTimeout(this.connectTimeout);
134 
135         RequestConfig requestConfig = builder.build();
136         init(requestConfig, route, maxTotal);
137     }
138     
139     private void init(RequestConfig requestConfig, int route, int maxTotal) {
140         X509TrustManager x509mgr = new X509TrustManager() {
141             @Override
142             public void checkClientTrusted(X509Certificate[] xcs, String string) {
143             }
144 
145             @Override
146             public void checkServerTrusted(X509Certificate[] xcs, String string) {
147             }
148 
149             @Override
150             public X509Certificate[] getAcceptedIssuers() {
151                 return null;
152             }
153         };
154 
155         SSLContext sslContext = null;
156         try {
157             sslContext = SSLContext.getInstance("TLS");
158         } catch (NoSuchAlgorithmException e1) {
159             e1.printStackTrace();
160         }
161 
162         try {
163             sslContext.init(null, new TrustManager[] { x509mgr }, null);
164         } catch (KeyManagementException e) {
165             e.printStackTrace();
166         }
167 
168         SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
169 
170         HttpRequestRetryHandler httpRequestRetryHandler = new HttpRequestRetryHandler() {
171             @Override
172             public boolean retryRequest(IOException exception, int executionCount, HttpContext context) {
173                 if (executionCount >= 5) {// 如果已经重试了5次,就放弃
174                     return false;
175                 }
176                 if (exception instanceof NoHttpResponseException) {// 如果服务器丢掉了连接,那么就重试
177                     return true;
178                 }
179                 if (exception instanceof SSLHandshakeException) {// 不要重试SSL握手异常
180                     return false;
181                 }
182                 if (exception instanceof InterruptedIOException) {// 超时
183                     return false;
184                 }
185                 if (exception instanceof UnknownHostException) {// 目标服务器不可达
186                     return false;
187                 }
188                 if (exception instanceof ConnectTimeoutException) {// 连接被拒绝
189                     return false;
190                 }
191                 if (exception instanceof SSLException) {// ssl握手异常
192                     return false;
193                 }
194                 // 2016-03-09针对broken pipe的问题做处理
195                 if (exception instanceof SocketException) {
196                     return true;
197                 }
198 
199                 HttpClientContext clientContext = HttpClientContext.adapt(context);
200                 HttpRequest request = clientContext.getRequest();
201                 // 如果请求是幂等的,就再次尝试
202                 if (!(request instanceof HttpEntityEnclosingRequest)) {
203                     return true;
204                 }
205                 return false;
206             }
207         };
208         DefaultRedirectStrategy redirectStrategy = new DefaultRedirectStrategy() {
209             public boolean isRedirected(HttpRequest request, HttpResponse response, HttpContext context) {
210                 boolean isRedirect = false;
211                 try {
212                     isRedirect = super.isRedirected(request, response, context);
213                 } catch (ProtocolException e) {
214                     e.printStackTrace();
215                 }
216                 if (!isRedirect) {
217                     int responseCode = response.getStatusLine().getStatusCode();
218                     if (responseCode == 301 || responseCode == 302) {
219                         return true;
220                     }
221                 }
222                 return isRedirect;
223             }
224 
225             @Override
226             protected URI createLocationURI(String location) throws ProtocolException {
227                 location = location.replace("|", "%7C");
228                 return super.createLocationURI(location);
229             }
230         };
231 
232         HttpClientBuilder httpClientBuilder = HttpClients.custom();
233         httpClientBuilder.setDefaultRequestConfig(requestConfig);
234         if (route > 0 && maxTotal > 0) {
235             PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager();
236             connManager.setDefaultMaxPerRoute(route);
237             connManager.setMaxTotal(maxTotal);
238             httpClientBuilder.setConnectionManager(connManager);
239         }
240 
241         httpClientBuilder.setSSLSocketFactory(sslsf);
242         httpClientBuilder.setDefaultCookieStore(cookieStore);
243         httpClientBuilder.setRedirectStrategy(redirectStrategy);
244         httpClientBuilder.setRetryHandler(httpRequestRetryHandler);
245         httpClient = httpClientBuilder.build();
246     }
247     public Response sendRequest(Request request) throws Exception {
248         // request.setHeader("Accept",
249         // "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
250         // request.setHeader("Accept-Encoding", "gzip, deflate");
251         if (request.getHeader("User-Agent") == null) {
252             request.setHeader("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:24.0) Gecko/20100101 Firefox/24.0");
253         }
254         request.setHeader("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3");
255         request.setHeader("Connection", "keep-alive");
256 
257         // logger.debug("发送请求:" + request);
258 
259         String method = request.getProperty("method").toLowerCase();
260         String url = request.getProperty("url");
261         Map<String, String> headers = request.getHeaders();
262         Map<String, String> params = request.getParams();
263         List<NameValuePair> formParams = new ArrayList<NameValuePair>();
264         if (params != null && params.size() != 0) {
265             formParams = new ArrayList<NameValuePair>();
266             for (Entry<String, String> entry : params.entrySet()) {
267                 formParams.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
268             }
269         }
270 
271         Response response = null;
272         if ("post".equals(method)) {
273             byte[] postData = request.getPostData();
274             if (postData != null) {
275                 response = post(url, postData, headers);
276             } else {
277                 response = post(url, formParams, headers);
278             }
279         } else if ("get".equals(method)) {
280             response = get(url, formParams, headers);
281         }
282         return response;
283     }
284 
285     /**
286      * Get请求
287      * 
288      * @param url
289      * @param params
290      * @return
291      */
292     public Response get(String url, List<NameValuePair> params, Map<String, String> headers) {
293         Response response = new Response();
294         try {
295             // Get请求
296             HttpGet httpGet = new HttpGet(url);
297 
298             String encoding = "utf-8";
299 
300             // 设置头
301             if (headers != null && headers.size() != 0) {
302                 for (Entry<String, String> entry : headers.entrySet()) {
303                     httpGet.setHeader(entry.getKey(), entry.getValue());
304                 }
305 
306                 String contentType = headers.get("Content-Type");
307                 if (StringUtils.isNotBlank(contentType)) {
308                     if (matcher(contentType, "(charset)\\s?=\\s?(gbk)")) {
309                         encoding = "gbk";
310                     } else if (matcher(contentType, "(charset)\\s?=\\s?(gb2312)")) {
311                         encoding = "gb2312";
312                     }
313                 }
314             }
315 
316             // 设置参数,如果url上已经有了问号,就不附加参数
317             if (params != null && params.size() > 0) {
318                 if (httpGet.getURI().toString().indexOf("?") == -1) {
319                     String str = EntityUtils.toString(new UrlEncodedFormEntity(params, encoding));
320                     httpGet.setURI(new URI(httpGet.getURI().toString() + "?" + str));
321                 } else {
322                     String str = EntityUtils.toString(new UrlEncodedFormEntity(params, encoding));
323                     httpGet.setURI(new URI(httpGet.getURI().toString() + "&" + str));
324                 }
325             }
326 
327             // 发送请求
328             CloseableHttpResponse httpResponse = httpClient.execute(httpGet);
329 
330             try {
331                 int statusCode = httpResponse.getStatusLine().getStatusCode();
332                 response.setStatusCode(statusCode);
333                 ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
334                 // 获取返回数据
335                 HttpEntity entity = httpResponse.getEntity();
336 
337                 Header[] responseHeaders = httpResponse.getAllHeaders();
338                 for (Header header : responseHeaders) {
339                     response.setHeader(header.getName(), header.getValue());
340                 }
341 
342                 Header header = entity.getContentEncoding();
343                 if (header != null && header.getValue().toLowerCase().equals("gzip")) {
344                     byte[] bytes = IOUtils.toByteArray(new GZIPInputStream(entity.getContent()));
345                     response.setContent(bytes);
346                 } else {
347                     byte[] bytes = getData(entity);
348                     response.setContent(bytes);
349                 }
350                 return response;
351             } finally {
352                 httpResponse.close();
353             }
354         } catch (ConnectTimeoutException e) {
355         } catch (HttpHostConnectException e) {
356         } catch (ParseException e) {
357         } catch (UnsupportedEncodingException e) {
358         } catch (IOException e) {
359         } catch (URISyntaxException e) {
360         } catch (Exception e) {
361         }
362         return null;
363     }
364 
365     /**
366      * // Post请求
367      * 
368      * @param url
369      * @param params
370      * @return
371      */
372     public Response post(String url, byte[] data, Map<String, String> headers) {
373         Response response = new Response();
374         try {
375             // Post请求
376             HttpPost httpPost = new HttpPost(url);
377             // 设置头
378             if (headers != null && headers.size() != 0) {
379                 for (Entry<String, String> entry : headers.entrySet()) {
380                     httpPost.setHeader(entry.getKey(), entry.getValue());
381                 }
382             }
383 
384             // 设置参数
385             httpPost.setEntity(new ByteArrayEntity(data));
386 
387             // 发送请求
388             CloseableHttpResponse httpResponse = httpClient.execute(httpPost);
389 
390             try {
391                 int statusCode = httpResponse.getStatusLine().getStatusCode();
392                 response.setStatusCode(statusCode);
393 
394                 // 获取返回数据
395                 HttpEntity entity = httpResponse.getEntity();
396 
397                 Header header = entity.getContentEncoding();
398                 if (header != null && header.getValue().toLowerCase().equals("gzip")) {
399                     byte[] bytes = IOUtils.toByteArray(new GZIPInputStream(entity.getContent()));
400                     response.setContent(bytes);
401                 } else {
402                     byte[] bytes = EntityUtils.toByteArray(entity);
403                     response.setContent(bytes);
404                 }
405 
406                 return response;
407             } finally {
408                 httpResponse.close();
409             }
410         } catch (ConnectTimeoutException e) {
411         } catch (HttpHostConnectException e) {
412         } catch (UnsupportedEncodingException e) {
413         } catch (ClientProtocolException e) {
414         } catch (ParseException e) {
415         } catch (IOException e) {
416         } catch (Exception e) {
417         }
418         return null;
419     }
420     private byte[] getData(HttpEntity entity) throws IOException {
421         if (entity == null) {
422             throw new IllegalArgumentException("HTTP entity may not be null");
423         }
424         InputStream inputStream = entity.getContent();
425         if (inputStream == null) {
426             return null;
427         }
428         try {
429             if (entity.getContentLength() > Integer.MAX_VALUE) {
430                 throw new IllegalArgumentException("HTTP entity too large to be buffered in memory");
431             }
432             int i = (int) entity.getContentLength();
433             if (i < 0) {
434                 i = 4096;
435             }
436 
437             ByteArrayBuffer buffer = new ByteArrayBuffer(i);
438             byte[] tmp = new byte[1024];
439             int l = -1;
440             try {
441                 while ((l = inputStream.read(tmp)) != -1) {
442                     buffer.append(tmp, 0, l);
443                 }
444             } catch (EOFException e) {
445                 buffer.clear();
446                 // 针对于以没有结束符的做fix处理,减小缓存,并进行异常处理,忽略最后不能获取的数据
447                 tmp = new byte[32];
448                 try {
449                     while ((l = inputStream.read(tmp)) != 1) {
450                         buffer.append(tmp, 0, l);
451                     }
452                 } catch (EOFException e2) {
453                 }
454 
455             }
456             // TODO 查明具体没有返回的原因
457             byte[] byteArray = buffer.toByteArray();
458             if (byteArray == null || byteArray.length == 0) {
459                 return buffer.buffer();
460             }
461             return byteArray;
462         } finally {
463             inputStream.close();
464         }
465     }
466     /**
467      * // Post请求
468      * 
469      * @param url
470      * @param params
471      * @return
472      */
473     public Response post(String url, List<NameValuePair> params, Map<String, String> headers) {
474         Response response = new Response();
475         try {
476             // Post请求
477             HttpPost httpPost = new HttpPost(url);
478 
479             String encoding = "utf-8";
480 
481             // 设置头
482             if (headers != null && headers.size() != 0) {
483                 for (Entry<String, String> entry : headers.entrySet()) {
484                     httpPost.setHeader(entry.getKey(), entry.getValue());
485                 }
486 
487                 String contentType = headers.get("Content-Type");
488                 if (StringUtils.isNotBlank(contentType)) {
489                     if (matcher(contentType, "(charset)\\s?=\\s?(gbk)")) {
490                         encoding = "gbk";
491                     } else if (matcher(contentType, "(charset)\\s?=\\s?(gb2312)")) {
492                         encoding = "gb2312";
493                     }
494                 }
495             }
496 
497             // 设置参数
498             if (params != null && params.size() > 0) {
499                 httpPost.setEntity(new UrlEncodedFormEntity(params, encoding));
500             }
501             // 发送请求
502             CloseableHttpResponse httpResponse = httpClient.execute(httpPost);
503 
504             try {
505                 int statusCode = httpResponse.getStatusLine().getStatusCode();
506                 response.setStatusCode(statusCode);
507 
508                 // 获取返回数据
509                 HttpEntity entity = httpResponse.getEntity();
510 
511                 Header header = entity.getContentEncoding();
512                 if (header != null && header.getValue().toLowerCase().equals("gzip")) {
513                     byte[] data = IOUtils.toByteArray(new GZIPInputStream(entity.getContent()));
514                     response.setContent(data);
515                 } else {
516                     byte[] data = getData(entity);
517                     response.setContent(data);
518                 }
519 
520                 return response;
521             } finally {
522                 httpResponse.close();
523             }
524         } catch (ConnectTimeoutException e) {
525         } catch (HttpHostConnectException e) {
526         } catch (UnsupportedEncodingException e) {
527         } catch (ClientProtocolException e) {
528         } catch (ParseException e) {
529         } catch (IOException e) {
530         } catch (Exception e) {
531         }
532         return null;
533     }
534 
535     /**
536      * 获取Response内容字符集
537      * 
538      * @param response
539      * @return
540      */
541     public String getContentCharset(HttpResponse response) {
542         String charset = "ISO_8859-1";
543         Header header = response.getEntity().getContentType();
544         if (header != null) {
545             String s = header.getValue();
546             if (matcher(s, "(charset)\\s?=\\s?(utf-?8)")) {
547                 charset = "utf-8";
548             } else if (matcher(s, "(charset)\\s?=\\s?(gbk)")) {
549                 charset = "gbk";
550             } else if (matcher(s, "(charset)\\s?=\\s?(gb2312)")) {
551                 charset = "gb2312";
552             }
553         }
554 
555         Header encoding = response.getEntity().getContentEncoding();
556 
557         return charset;
558     }
559     
560     /**
561      * 正则匹配
562      * 
563      * @param s
564      * @param pattern
565      * @return
566      */
567     private boolean matcher(String s, String pattern) {
568         Pattern p = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE + Pattern.UNICODE_CASE);
569         Matcher matcher = p.matcher(s);
570         if (matcher.find()) {
571             return true;
572         } else {
573             return false;
574         }
575     }
576     
577     public Integer getConnectTimeout() {
578         return connectTimeout;
579     }
580 
581     public void setConnectTimeout(Integer connectTimeout) {
582         this.connectTimeout = connectTimeout;
583     }
584 
585     public Integer getSocketTimeout() {
586         return socketTimeout;
587     }
588 
589     public void setSocketTimeout(Integer socketTimeout) {
590         this.socketTimeout = socketTimeout;
591     }
592 
593     public CloseableHttpClient getHttpClient() {
594         return httpClient;
595     }
596 
597     public void setHttpClient(CloseableHttpClient httpClient) {
598         this.httpClient = httpClient;
599     }
600 
601     public CookieStore getCookieStore() {
602         return cookieStore;
603     }
604 
605     public void setCookieStore(CookieStore cookieStore) {
606         for(Cookie cookie:cookieStore.getCookies()){
607             this.cookieStore.addCookie(cookie);
608         }
609     }
610     
611 }

 

 

 

六,补充类StringUtils

 1 package com.http;
 2 
 3 public class StringUtils {
 4 
 5     /**
 6      * Unicode 转化成中文
 7      * 
 8      * @param utfString
 9      * @return
10      */
11     public static String decodeUnicode(String theString) {
12         char aChar;
13         int len = theString.length();
14         StringBuffer outBuffer = new StringBuffer(len);
15         for (int x = 0; x < len;) {
16             aChar = theString.charAt(x++);
17             if (aChar == '\\') {
18                 aChar = theString.charAt(x++);
19                 if (aChar == 'u') {
20                     // Read the xxxx
21                     int value = 0;
22                     for (int i = 0; i < 4; i++) {
23                         aChar = theString.charAt(x++);
24                         switch (aChar) {
25                         case '0':
26                         case '1':
27                         case '2':
28                         case '3':
29                         case '4':
30                         case '5':
31                         case '6':
32                         case '7':
33                         case '8':
34                         case '9':
35                             value = (value << 4) + aChar - '0';
36                             break;
37                         case 'a':
38                         case 'b':
39                         case 'c':
40                         case 'd':
41                         case 'e':
42                         case 'f':
43                             value = (value << 4) + 10 + aChar - 'a';
44                             break;
45                         case 'A':
46                         case 'B':
47                         case 'C':
48                         case 'D':
49                         case 'E':
50                         case 'F':
51                             value = (value << 4) + 10 + aChar - 'A';
52                             break;
53                         default:
54                             throw new IllegalArgumentException(
55                                     "Malformed   \\uxxxx   encoding.");
56                         }
57 
58                     }
59                     outBuffer.append((char) value);
60                 } else {
61                     if (aChar == 't')
62                         aChar = '\t';
63                     else if (aChar == 'r')
64                         aChar = '\r';
65                     else if (aChar == 'n')
66                         aChar = '\n';
67                     else if (aChar == 'f')
68                         aChar = '\f';
69                     outBuffer.append(aChar);
70                 }
71             } else
72                 outBuffer.append(aChar);
73         }
74         return outBuffer.toString();
75     }
76 }

 

七,补充类BaiduMapProxyService

 1 package com.http;
 2 
 3 
 4 
 5 /**
 6  * 使用代理 请求会经过代理
 7  * title:百度地图服务类 <br>
 8  * 版权: Copyright (c) 2011-2016<br>
 9  * 
10  * @author:Administrator<br>
11  * @date:Apr 7, 2016<br>
12  */
13 public class BaiduMapProxyService {
14 
15     /**
16      * 代理发送请求
17      */
18     private  HttpClientUtil httpClientUtil=new HttpClientUtil("127.0.0.1",8888);
19     
20     public String insertLocation(String title, String longitude,
21             String latitude, String address) {
22         
23         //插入数据接口
24         String url = "http://api.map.baidu.com/geodata/v3/poi/create";
25 
26         Request request=new Request();
27         //数据
28         request.setProperty("url", url);
29         request.setProperty("method", "post");
30         
31         //我自己的百度云数据库名称
32         request.setParam("geotable_id", "137287");
33         request.setParam("ak", "GShGXR4uNroTq4mzqsf1v7h3VgsC3aIk");
34         request.setParam("latitude", latitude);
35         request.setParam("longitude", longitude);
36         request.setParam("address", address);
37         request.setParam("coord_type", "3");
38         
39         request.setParam("title", title);
40         
41         Response response;
42             try {
43                 response = httpClientUtil.sendRequest(request);
44                 if(response==null||response.getStatusCode()!=200){
45                     return null;
46                 }
47                 String content =response.getContentString("utf-8");
48                 System.out.println("返回的数据是:"+content);
49                 return content;
50             } catch (Exception e) {
51                 // TODO Auto-generated catch block
52                 e.printStackTrace();
53             }
54             
55         return null;
56 
57     }
58 
59     /**
60      * 根据经纬度查周边学校半径500米
61      * 
62      * @return
63      */
64     public String findNearBySchool(String longitude, String latitude) {
65         String url = "http://api.map.baidu.com/geosearch/v3/nearby?geotable_id=137287&ak=GShGXR4uNroTq4mzqsf1v7h3VgsC3aIk&radius=500&location="
66                 + longitude + "," + latitude;
67         
68         
69         
70         Request request=new Request();
71         request.setProperty("url", url);
72         request.setProperty("method", "get");
73         
74         Response response=new Response();
75         
76         try {
77             response = httpClientUtil.sendRequest(request);
78             if(response==null||response.getStatusCode()!=200){
79                 return null;
80             }
81             
82             String content =response.getContentString("utf-8");
83             System.out.println("返回数据:"+content);
84             return content;
85         } catch (Exception e) {
86             // TODO Auto-generated catch block
87             e.printStackTrace();
88         }
89         return null;
90 
91     }
92 }

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,你需要在百度地图开放平台申请一个开发者账号并创建一个应用,获取到应用的AK(Access Key)。 然后,在Spring Boot项目中,你可以使用HttpClient或者RestTemplate来调用百度地图接口并获取返回结果。具体实现步骤如下: 1. 添加HttpClient或RestTemplate相关依赖。 2. 创建一个POJO类来封装百度地图API返回的数据,例如: ```java public class BaiduMapResponse { private int status; private String message; private List<Marker> markers; // getters and setters } public class Marker { private double longitude; private double latitude; private String title; // getters and setters } ``` 3. 创建一个Service类来调用百度地图API,例如: ```java @Service public class BaiduMapService { private static final String BAIDU_MAP_API_URL = "http://api.map.baidu.com/place/v2/search"; private static final String AK = "your_access_key_here"; public List<Marker> search(String query, String region) { RestTemplate restTemplate = new RestTemplate(); String url = String.format("%s?query=%s&region=%s&output=json&ak=%s", BAIDU_MAP_API_URL, query, region, AK); BaiduMapResponse response = restTemplate.getForObject(url, BaiduMapResponse.class); if (response.getStatus() == 0) { return response.getMarkers(); } else { throw new RuntimeException("Failed to search on Baidu Map API: " + response.getMessage()); } } } ``` 4. 在Controller中调用BaiduMapService,并将返回的Marker列表传递给前端页面进行标记。例如: ```java @Controller public class MapController { @Autowired private BaiduMapService baiduMapService; @GetMapping("/search") public String search(@RequestParam("query") String query, @RequestParam("region") String region, Model model) { List<Marker> markers = baiduMapService.search(query, region); model.addAttribute("markers", markers); return "map"; } } ``` 5. 在前端页面使用JavaScript或其他地图API库来显示地图并标记。例如,在使用百度地图JavaScript API时,可以使用如下代码: ```html <div id="map" style="height: 600px;"></div> <script src="http://api.map.baidu.com/api?v=2.0&ak=your_access_key_here"></script> <script> var map = new BMap.Map("map"); map.centerAndZoom("北京", 12); var markers = /*[[${markers}]]*/ []; for (var i = 0; i < markers.length; i++) { var marker = new BMap.Marker(new BMap.Point(markers[i].longitude, markers[i].latitude)); marker.setTitle(markers[i].title); map.addOverlay(marker); } </script> ``` 以上就是在Spring Boot项目中调用百度地图API并标记的基本步骤。当然,具体实现方式还需要根据你的实际需求和项目结构进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值