高德地图web端笔记;发送http请求的工具类

简介: 1.查询所有电子围栏 package com.skjd.util; import java.io.BufferedReader; import java.io.InputStream; import java.

1.查询所有电子围栏

package com.skjd.util;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;

public class HttpUtils {
    
    // 代理服务器的HTTP请求协议,客户端真实IP字段名称
        public static final String X_REAL_IP = "x-forwarded-for";

    public static String get(final String url) throws Exception {
        String result = null;
        CloseableHttpClient httpclient = HttpClients.createDefault();
        try {
            HttpGet httpGet = new HttpGet(url);
            CloseableHttpResponse response = httpclient.execute(httpGet);
            try {
                System.out.println(response.getStatusLine());
                HttpEntity entity = response.getEntity();
                // do something useful with the response body
                // and ensure it is fully consumed
                result = org.apache.http.util.EntityUtils.toString(entity);
                org.apache.http.util.EntityUtils.consume(entity);
            } finally {
                response.close();
            }
        } finally {
            httpclient.close();
        }

        return result;
    }

    public static String post(final String url, final Map<String, String> param) throws Exception {
        String result = null;
        CloseableHttpClient httpclient = HttpClients.createDefault();
        try {
            HttpPost httpPost = new HttpPost("http://httpbin.org/post");
            List<NameValuePair> nvps = new ArrayList<NameValuePair>();

            for (String key : param.keySet()) {
                nvps.add(new BasicNameValuePair(key, param.get(key)));
            }

            httpPost.setEntity(new UrlEncodedFormEntity(nvps));
            CloseableHttpResponse response = httpclient.execute(httpPost);

            try {
                System.out.println(response.getStatusLine());
                HttpEntity entity = response.getEntity();
                // do something useful with the response body
                // and ensure it is fully consumed
                result = org.apache.http.util.EntityUtils.toString(entity);
                org.apache.http.util.EntityUtils.consume(entity);
            } finally {
                response.close();
            }
        } finally {
            httpclient.close();
        }
        return result;
    }

    
    /**
     * 发送POST请求的方法
     */
    public static String sendPostRequest(String url,String param){
        HttpURLConnection httpURLConnection = null;
        OutputStream out = null; //
        InputStream in = null;   //
        int responseCode = 0;    //远程主机响应的HTTP状态码
        String result="";
        try{
            URL sendUrl = new URL(url);
            httpURLConnection = (HttpURLConnection)sendUrl.openConnection();
            //post方式请求
            httpURLConnection.setRequestMethod("POST");
            //设置头部信息
            httpURLConnection.setRequestProperty("headerdata", "ceshiyongde");
            //一定要设置 Content-Type 要不然服务端接收不到参数
            httpURLConnection.setRequestProperty("Content-Type", "application/Json; charset=UTF-8");
            //指示应用程序要将数据写入URL连接,其值默认为false(是否传参)
            httpURLConnection.setDoOutput(true);
            //httpURLConnection.setDoInput(true);       
            httpURLConnection.setUseCaches(false);
            httpURLConnection.setConnectTimeout(30000); //30秒连接超时
            httpURLConnection.setReadTimeout(30000);    //30秒读取超时
            //获取输出流
            out = httpURLConnection.getOutputStream();
            //输出流里写入POST参数
            out.write(param.getBytes());
            out.flush();
            out.close();
            responseCode = httpURLConnection.getResponseCode();
            BufferedReader br = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream(),"UTF-8"));
            result =br.readLine();
        }catch(Exception e) {
            e.printStackTrace();      
      }
    return result;
      
  }
    
    
    /**
     * 发送GET请求的方法
     */
    public static String sendPostRequestGet(String url){
        HttpURLConnection httpURLConnection = null;
        OutputStream out = null; //
        InputStream in = null;   //
        int responseCode = 0;    //远程主机响应的HTTP状态码
        String result="";
        try{
            URL sendUrl = new URL(url);
            httpURLConnection = (HttpURLConnection)sendUrl.openConnection();
            //post方式请求
            httpURLConnection.setRequestMethod("GET");
            //设置头部信息
            httpURLConnection.setRequestProperty("headerdata", "ceshiyongde");
            //一定要设置 Content-Type 要不然服务端接收不到参数
            httpURLConnection.setRequestProperty("Content-Type", "application/Json; charset=UTF-8");
            //指示应用程序要将数据写入URL连接,其值默认为false(是否传参)
            httpURLConnection.setDoOutput(true);
            //httpURLConnection.setDoInput(true); 
            
            httpURLConnection.setUseCaches(false);
            httpURLConnection.setConnectTimeout(30000); //30秒连接超时
            httpURLConnection.setReadTimeout(30000);    //30秒读取超时
            responseCode = httpURLConnection.getResponseCode();
            BufferedReader br = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream(),"UTF-8"));
            result =br.readLine();
        }catch(Exception e) {
            e.printStackTrace();        
        }
        return result;
        
    }
    
    /**
     * for nigx返向代理构造 获取客户端IP地址
     * @param request
     * @return
     */
    public static String getRemoteHost(HttpServletRequest request){
        String ip = request.getHeader(X_REAL_IP);
        if(ip == null || ip.length() == 0 || ip.equalsIgnoreCase("unknown")) {
            ip = request.getRemoteAddr();
        }
        return ip.split(",")[0];
    }
    
    
    public static void main(String[] args) {
        try {
            System.out.println(get("http://www.baidu.com"));
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}
http请求工具类
    /**
     * 根据key查询所有的围栏
     * 返回所有围栏的信息
     * @param pd
     * @return
     * @throws Exception 
     */
    public List<Map<String,Object>> select(Map<String,Object> pd) throws Exception{
        Gson gson=new Gson();
        String key=pd.get("key").toString();
        String url="http://restapi.amap.com/v4/geofence/meta?key="
                +key;
         //请求返回的参数
        String data=HttpUtils.sendPostRequestGet(url);
        //转为对象便于获取
        Map<String,Object> dataJson = gson.fromJson(data, HashMap.class);
        Map<String, Object> map=(LinkedTreeMap)dataJson.get("data");
        List<Map<String,Object>> list = (List)map.get("rs_list");
        
        return list;
    }    

2.创建围栏

/**
     * 传入对应格式的坐标区域,创建一个围栏;返回status(新增成功0,已存在返回1;失败返回2);若新增成功则返回gid;message信息
     */
    public static  PageData xyUtil(PageData pd){
        PageData pd2=new PageData();
        pd.put("key", "be8e6c802d51a4be29c99be895d8c2c7");
        //数据库读取的坐标参数
        /*114.288221,30.593268#114.321866,30.580559#114.311223,30.560015#114.291278,30.602487#*/
        //第三方接口要求的格式:lon1,lat1;lon2,lat2;lon3,lat3(3<=点个数<=5000)
        //将#号换为;
        String points = pd.getString("points").replace("#", ";");
        String key=pd.getString("key");
        String name=pd.getString("name1");
        PageData pd3=new PageData();
        pd3.put("points", points);
        pd3.put("name", name);
        /*pd3.put("valid_time ", DateUtil.getDay());设置过期时间、默认90天*/
        pd3.put("repeat", "Mon,Tues,Wed,Thur,Fri,Sat,Sun");//可以指定每天的监控时间段和一周内监控的日期
           Gson gson=new Gson();
            //传入的参数
            String param=gson.toJson(pd3);
            String url="http://restapi.amap.com/v4/geofence/meta?key="
                    + key
                    + "&type=ajaxRequest";
            String data=HttpUtil.sendPostRequest(url,param);
                    //请求回来的数据
                    System.out.println(data);
                    PageData data2 = gson.fromJson(data, pd.getClass());
                    PageData data3 = gson.fromJson(data2.get("data").toString(), pd.getClass());
                    //状态为0说明新增成功!
                  if(data3.get("status").toString().equals("0.0")){
                      pd2.put("status", "0");
                      pd2.put("gid", data3.get("gid").toString());
                //返回状态106.0说明已存在,则查询此区域的gid
                  }else if(data3.get("status").toString().equals("106.0")){
                      pd2.put("status", "1");
                  }else{
                      pd2.put("status", "2");
                  }
                  pd2.put("message", data3.get("message").toString());
        return pd2;
    }

3.更新围栏

/**
     * 更新围栏;传入围栏名称name;gid;传入围栏坐标点points
     * @param pd
     * @return 返回status
     */
    public static PageData xyupdata(PageData pd){
        PageData pd2=new PageData();
        pd.put("key", "be8e6c802d51a4be29c99be895d8c2c7");
        String key=pd.getString("key");
    /*    String gid=pd.getString("gid");*/
        String gid=pd.getString("gid");
        pd2.put("repeat", "Mon,Tues,Wed,Thur,Fri,Sat,Sun");
        pd2.put("points",pd.getString("points").replace("#", ";"));
        pd2.put("name", pd.getString("name1"));
            
         Gson gson=new Gson();
            //传入的参数
            String param=gson.toJson(pd2);        
            String url="http://restapi.amap.com/v4/geofence/meta?key="
                    + key+"&gid="
                    +gid
                    + "&type=ajaxRequest&method=patch";
            String data=HttpUtil.sendPostRequest(url,param);
            System.out.println(data);
            PageData data2 = gson.fromJson(data, pd.getClass());
            PageData data3 = gson.fromJson(data2.get("data").toString(), pd.getClass());
        return data3;
    }

4.删除围栏

    /**
     * 删除围栏;传入围栏名称gid;
     * @param pd
     * @return 返回status
     */
    public static PageData xydel(PageData pd){
        PageData pd2=new PageData();
        pd.put("key", "be8e6c802d51a4be29c99be895d8c2c7");
        String key=pd.getString("key");
        /*    String gid=pd.getString("gid");*/
        String gid=pd.getString("gid");        
        Gson gson=new Gson();
        //传入的参数
        String param=gson.toJson(pd2);        
        String url="http://restapi.amap.com/v4/geofence/meta?key="
                + key+"&gid="
                +gid
                + "&type=ajaxRequest&method=delete";
        String data=HttpUtil.sendPostRequest(url,param);
        System.out.println(data);
        PageData data2 = gson.fromJson(data, pd.getClass());
        PageData data3 = gson.fromJson(data2.get("data").toString(), pd.getClass());
        return data3;
    }

5.查询一个坐标是否在围栏内;如果需要查询是否在指定的围栏内,需要做进一步处理

    /**需要传入参数key;diu(唯一设备号);时间戳;坐标点
     *返回 状态status(0表示在范围内;1表示不在范围内)
     *如果在范围内,则返回围栏列表,带有gid和name
     * @throws Exception 
     */
    public Map<String,Object> xyTest(Map<String,Object> pd) throws Exception{
        Map<String,Object> pd2=new HashMap();
        
        //坐标点
        String locations =pd.get("locations").toString();
        //key
        String key=pd.get("key").toString();
        //设备唯一标识
        String diu=pd.get("diu").toString();
        //时间戳
        String time="1484816232";    
           Gson gson=new Gson();
            String url="http://restapi.amap.com/v4/geofence/status?"
                    + "key="+key
                    + "&diu="+diu
                    + "&locations="+locations+","
                    + time;
            //请求返回的参数
            String data=HttpUtils.sendPostRequestGet(url);
           //转为对象便于获取
            Map<String,Object> dataJson = gson.fromJson(data, HashMap.class);
            Map<String, Object> map=(LinkedTreeMap)dataJson.get("data");    
            
                //获取围栏事件列表;如果为空说明不在围栏内
        if(map.get("fencing_event_list")==null||((List)map.get("fencing_event_list")).size()<1){
                pd2.put("status", "1");
                return pd2;
            }
            //如果不为空,则获取里面的返回值
        List<Map<String,Object>> list = (List) map.get("fencing_event_list");
                List<Map<String,Object>> list2 = new ArrayList<>();
                for(int i=0;i<list.size();i++){
                    Map<String,Object> pd3=new HashMap();
                    Map<String,Object> map2 = list.get(i);
                    //如果高德地图api返回的状态为in说明在范围内
                    if(map2.get("client_status").toString().equals("in")){
                        //围栏信息
                        Map<String,Object> map3 =(Map)map2.get("fence_info");
                    
                        //添加全局围栏gid值;
                        pd3.put("fence_gid",map3.get("fence_gid").toString());
                        //添加围栏名称
                        pd3.put("fence_name", map3.get("fence_name").toString()); 
                        list2.add(pd3);
                    }               
                }
                //添加状态值
            pd2.put("status", "0");
            pd2.put("list", list2);
            return pd2;
    }
目录
相关文章
|
19天前
|
XML Java 数据格式
Servlet 教程 之 Servlet 客户端 HTTP 请求 3
该教程展示了如何在Servlet中处理客户端HTTP请求,特别是获取HTTP头信息。示例代码创建了一个名为`DisplayHeader`的Servlet,它扩展了`HttpServlet`并重写了`doGet`方法。在`doGet`中,使用`HttpServletRequest`的`getHeaderNames()`遍历所有头部,显示其名称和对应值。Servlet在TomcatTest项目下,通过`web.xml`配置映射到`/TomcatTest/DisplayHeader`路径。
31 14
|
19天前
|
安全 Java 网络安全
Servlet 教程 之 Servlet 客户端 HTTP 请求 2
Servlet教程介绍了如何在Servlet中处理HTTP请求,包括获取Cookie、头信息、参数、Session等。方法如:`getCookies()`、`getAttributeNames()`、`getHeaderNames()`、`getParameterNames()`等。还能获取身份验证类型、字符编码、MIME类型、请求方法、远程用户信息、URL路径、安全通道状态以及请求内容长度等。此外,可通过`getSession()`创建或获取Session,并以`Map`形式获取参数。
24 8
|
1天前
|
API
http代理ip请求并发数是什么?有什么用?
HTTP代理IP请求并发数指单个客户端对API或代理IP同时发起的请求数量,分为API链接请求并发和IP最大连接数。并发是瞬时同时请求,不同提供商限制不同。高并发请求的代理IP服务商能更好地应对程序压力。选择时应考虑这一因素。
|
1天前
|
Go
深度探讨 Golang 中并发发送 HTTP 请求的最佳技术
深度探讨 Golang 中并发发送 HTTP 请求的最佳技术
|
3天前
|
API UED Python
使用Python进行异步HTTP请求的实践指南
使用Python进行异步HTTP请求的实践指南
18 4
|
6天前
|
XML JSON Java
【Web系列笔记】Restful
本文讨论了RESTful接口设计的原因和原则。传统方式中,http接口常按功能聚合,导致行为不规范,如订单操作有多种请求方式。RESTful设计强调资源的结构清晰、标准统一,通过资源URI、表现层和状态转化来组织接口。它推荐使用GET、POST、PUT和DELETE等HTTP方法对应资源的创建、读取、更新和删除操作。在实践中,应避免URI中包含动词,确保每个URI代表一种资源,并利用HTTP动词表达操作。这样能提高接口的易理解和扩展性。
32 8
|
8天前
|
JSON 缓存 前端开发
【Web系列相关笔记】跨域
CORS是一种W3C标准,用于跨域资源共享,允许浏览器在发送AJAX请求时突破同源策略。它涉及浏览器和服务器两方,其中浏览器自动处理CORS请求,添加Origin头信息。服务器需通过返回特定的Access-Control-Allow-*头信息来允许跨域访问。
20 0
|
9天前
|
缓存 负载均衡 网络协议
【亮剑】一次完整的 HTTP 请求过程,包括 DNS 解析、TCP 握手、HTTP 请求和响应等环节
【4月更文挑战第30天】本文介绍了HTTP请求的重要性和详细过程。首先,DNS解析将域名转换为IP地址,通过递归和迭代查询找到目标服务器。接着,TCP三次握手建立连接。然后,客户端发送HTTP请求,服务器处理请求并返回响应。最后,理解这个过程有助于优化网站性能,如使用DNS缓存、HTTP/2、Keep-Alive、CDN和负载均衡等实践建议。
|
11天前
|
JSON 编解码 Go
Golang深入浅出之-HTTP客户端编程:使用net/http包发起请求
【4月更文挑战第25天】Go语言`net/http`包提供HTTP客户端和服务器功能,简化高性能网络应用开发。本文探讨如何发起HTTP请求,常见问题及解决策略。示例展示GET和POST请求的实现。注意响应体关闭、错误处理、内容类型设置、超时管理和并发控制。最佳实践包括重用`http.Client`,使用`context.Context`,处理JSON以及记录错误日志。通过实践这些技巧,提升HTTP编程技能。
24 1
|
11天前
|
前端开发 API UED
AngularJS的$http服务:深入解析与进行HTTP请求的技术实践
【4月更文挑战第28天】AngularJS的$http服务是核心组件,用于发起HTTP请求与服务器通信。$http服务简化了通信过程,通过深入理解和实践,能构建高效、可靠的前端应用。