伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

GET/POST接收或发送数据的问题

来源:本站原创 浏览:145次 时间:2021-07-30

SpringCloud实战视频下载

Javaweb练手项目源码下载

精选Javaweb相关视频教程

100套IT类简历模板下载

在文章开始,先来回忆一下GET、POST这两种请求方式的区别。

Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。到这里,大家应该有个大概的了解了,GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。

0、GET请求,请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接。URL的编码格式采用的是ASCII编码,而不是uniclde,即是说所有的非ASCII字符都要编码之后再传输。
POST请求:POST请求会把请求的数据放置在HTTP请求包的包体中。上面的item=bandsaw就是实际的传输数据。
因此,GET请求的数据会暴露在地址栏中,而POST请求则不会。

1、传输数据的大小
在HTTP规范中,没有对URL的长度和传输的数据大小进行限制。但是在实际开发过程中,对于GET,特定的浏览器和服务器对URL的长度有限制。因此,在使用GET请求时,传输数据会受到URL长度的限制。
对于POST,由于不是URL传值,理论上是不会受限制的,但是实际上各个服务器会规定对POST提交数据大小进行限制,Apache、IIS都有各自的配置。

2、安全性
POST的安全性比GET的高。这里的安全是指真正的安全,而不同于上面GET提到的安全方法中的安全,上面提到的安全仅仅是不修改服务器的数据。比如,在进行登录操作,通过GET请求,用户名和密码都会暴露再URL上,因为登录页面有可能被浏览器缓存以及其他人查看浏览器的历史记录的原因,此时的用户名和密码就很容易被他人拿到了。除此之外,GET请求提交的数据还可能会造成Cross-site request frogery***

3、HTTP中的GET,POST,SOAP协议都是在HTTP上运行的

以上内容摘自?哪?如有雷同,不关我事。

以下内容是我在开发中对遇到的问题做的总结,能力一般,水平有限,如有错误,敬请指出。

  1. 发出POST请求,获取某接口中的数据。
    需求简述: 从指定的接口中获����,��ͷ取到数据并存储,POST请求头的header中需要加接口发布方提供的串码,否则POST请求会被拦截,导致获取不到数据。

核心代码如下:一般在service层做处理

**使用IDEA,SpringBoot微服务架构,MongoDB数据库。**public List<Document> getDataFromURL(){        String result = "";//用来接收接口中的数据。        String url = "获取数据的接口URL写在这里";        /*        *此处引入了commons-httpclient的jar包,jar包依赖如下:        <dependency>            <groupId>commons-httpclient</groupId>            <artifactId>commons-httpclient</artifactId>            <version>3.1</version>        </dependency>        */        HttpClient httpClient = new HttpClient();        PostMethod postMethod = new PostMethod(url);        try {            //设置header的名称和值。            postMethod.setRequestHeader("headerKey","headerValue");            int statusCode = 0;//设置请求结果的状态值,一般为200、404、500            try {                statusCode = httpClient.executeMethod(postMethod);            }catch (Exception e ){                e.printStackTrace();            }            if(statusCode == HttpStatus.SC_OK){                try {                    result = postMethod.getResponseBodyAsString();                }catch (Exception e){                    e.printStackTrace();                }            }else{                System.out.println("请求有误,错误代码:"+statusCode);            }        }catch (Exception e){            System.out.println(e.getMessage());        }finally {        //关闭HTTP连接,这两行代码一定要有。            postMethod.releaseConnection();            httpClient.getHttpConnectionManager().closeIdleConnections(0);        }        JSONObject jsonObject = new JSONObject(result);        JSONArray jsonArray = new JSONArray();        try {        //我需要的是接口中的“data”值,具体get什么看自己需求。            jsonArray = jsonObject.get("data");        }catch (Exception e){            System.out.println("获取不到data,检查串码是否过期");        }        List<Document> list = new ArrayList<>();        for (int i = 0; i < jsonArray.length();i++){            Document document = new Document();//这个截字符串的方法不错。记住传参一般都是“包头不包尾”            String time = ((JSONObject)jsonArray.get(i)).getString("time").replace("T"," ").substring(0,19);           //获取JSON数组中的数据,按需求数据格式转换入库数据的格式。           //这里就写上你对接口中数据的处理吧,想要什么get什么,之后在return它。        }        return list;    }

1. 发出POST请求,将数据发送至某接口
需求简述 : 某模块发布出一个接口,规定了传数据的格式,我需要把数据库中的数据查出来,组合成为对方需求的格式并发出。

核心代码如下:一般在service层做处理,查询数据的过程不展示

**IDEA、SpringBoot、MongoDB**//如果项目中多次使用到发数据至某接口的方法,可将此方法作为工具类,设置合理的参数列表即可public class SendDataToURL {    //参数列表:url--发送数据的目标地址。param--发送的内容,格式依据自身需求    public static Boolean sendPost(String url, String param) {        OutputStreamWriter out = null;        BufferedReader in = null;        String result = "";        try {            URL realUrl = new URL(url);            HttpURLConnection conn = null;            conn = (HttpURLConnection) realUrl.openConnection();            // 发送POST请求必须设置如下两行            conn.setDoOutput(true);            conn.setDoInput(true);            // 设置请求方式为POST方法            conn.setRequestMethod("POST");                // 设置通用的请求属性            conn.setRequestProperty("accept", "*/*");            conn.setRequestProperty("connection", "Keep-Alive");            conn.setRequestProperty("user-agent",                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");            //此处可以设置请求参数,若接口的header中有串码可以在此设置。            conn.setRequestProperty("headerKey", "headerValue");            conn.connect();            // 获取URLConnection对象对应的输出流            out = new OutputStreamWriter(conn.getOutputStream(),"UTF-8");            // 发送请求参数,发送的数据在此处发送。            out.write(param);            // flush输出流的缓冲            out.flush();            // 定义BufferedReader输入流来读取URL的响应            in = new BufferedReader(                    new InputStreamReader(conn.getInputStream(), "UTF-8"));            String line ;            while ((line = in.readLine()) != null) {                result += line;            }        } catch (Exception e) {            System.out.println("发送 POST 请求出现异常!"+e);            e.printStackTrace();        }        //使用finally块来关闭输出流、输入流        finally{            try{                if(out!=null){                    out.close();                }                if(in!=null){                    in.close();                }            }            catch(IOException ex){                ex.printStackTrace();            }        }       //result为请求结束后返回的response,可以让接口发布方设置数据是否发送成功的标识,具体怎么返回还需要你们自己协商。        if(result.contains("SUCCESS")){            return true;        }else{            return false;        }    }

2.由页面发起GET请求,之后POST数据至指定接口,接口方收到数据后返回响应信息,由service层做处理,再由controller返回响应信息至GET请求发起方。

需求简述 : 页面中的button发起了GET请求,controller中调用相关的处理方法,将数据以POST的形式发送至某接口中,接口发布方收到数据之后,返回响应信息(其中包括对接收状态的标识),由返回信息判断是否成功接收数据,之后再返回响应信息至GET请求发起方,展示是否成功发送数据。

controller层发布接口,供页面发起GET请求用,返回值为String(也可为其他,视自身情况定)。

**IDEA、SpringBoot、MongoDB、RESTful**@RestController//此注解包含了@ResponseBody和@Controller注解。@RequestMapping(value = "/sendDataToURL")public class TestController {    @RequestMapping(value = "/test" , method = RequestMethod.GET)    //使用@RequestParam注解获取GET请求发起方request中的信息。    //如:http://localhost:8080/sendDataToURL/test?id=test    public String testSendData(@RequestParam("id") String id){        Boolean flag = 发送数据的方法,返回值可定义为boolean,可做响应信息的标识        logger.info(flag ? "成功" : "失败";//打上日志,方便查看        return flag ? "true" : "false";    }}**在service层做对数据发送的处理,方法参照本文第1部分**

本文中还涉及到对JSON对象、JSON数组、Document对象、List集合等问题的处理,都属于基本操作,注意字段取值时的拼写问题即可,不做详述。

  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net