java实现HTTP的post请求 key-value格式与json格式的区别
来源:互联网 发布:数字1一10的美工字体 编辑:程序博客网 时间:2024/06/14 11:40
之前写过接口接收json格式的post请求,当时自己写完以为可以适应各种报文的发送,最近对方说要有个”content=发送内容”,这不就是最简单的post请求吗,那直接用我之前写的http://blog.csdn.net/do_finsh/article/details/70237544发送方法加上“content=“不就可以了,结果对方说没有content,后来网上找的很多方法都可以成功,为什么我之前写的不行,之后改了行代码就可以了。先说明改了哪行代码,再探究一下为什么。
/** * 向指定URL发送post方法的请求,字符串 * @param urlString 地址 * @param reqString 请求参数 name1=value1&name2=value2 的形式。 * @return String 返回内容 */public static String postString(String urlString ,String reqString) { StringBuffer sb = new StringBuffer(""); try { // 创建连接 URL url = new URL(urlString); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setDoOutput(true); connection.setDoInput(true); connection.setUseCaches(false); connection.setInstanceFollowRedirects(true); //下边这行注释掉 /***connection.setRequestProperty("Content-Type","application/json;charset=UTF-8");***/ connection.connect(); DataOutputStream out = new DataOutputStream( connection.getOutputStream()); out.write(reqString.getBytes("UTF-8")); out.flush(); out.close(); // 读取响应 BufferedReader reader = new BufferedReader(new InputStreamReader( connection.getInputStream(),"utf-8")); String lines; while ((lines = reader.readLine()) != null) { sb.append(lines); } reader.close(); // 断开连接 connection.disconnect(); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } if (sb.toString().length()==0|sb.toString().trim().length()==0) { return ""; } return sb.toString(); }
只改变了一行代码,就相当于两种传输格式了。下面分析一下Content-Type不同的影响
application/json
application/json 用来告诉服务端消息主体是序列化后的 JSON 字符串。
JSON 格式支持比键值对复杂得多的结构化数据,但是如果在这种格式下用到key—value形式,接收方就接收不到value,因为本人小白,其实不懂这之间的本质,只能多测试几次,首先传输json格式的报文,传输之后解析成功,传输非json格式的报文的话,其实也可以接收到报文的整体内容,那么可能不是application/json 的影响,看下边这种格式,
application/x-www-form-urlencoded
常见的 POST 提交数据的方式。浏览器的原生 form 表单,如果不设置 enctype 属性,以及 ajax 提交数据那么最终就会以 application/x-www-form-urlencoded 方式提交数据。我们只看数据通过post请求接口提交数据,按照key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码。例:
第一部分 请求行,请求方法 post
第二部分 请求头部 Content-Type: application/x-www-form-urlencoded
Content-Length: 38
一个空行
第三部分 请求的数据 经过URLEncoder.encode的数据
区别就应该在第三部分的处理形式,application/json形式的传输没有第三部分的处理
- java实现HTTP的post请求 key-value格式与json格式的区别
- java发送JSON格式的http通讯的post请求
- java实现HTTP的post请求 json格式中文乱码问题
- java实现HTTP的post请求 json格式中文乱码问题
- Json格式的http请求
- JAVA HTTP POST请求(请求参数格式为json)
- json格式ajax的post请求方式
- postman发送json格式的post请求
- Http post请求 entity body的格式
- python 发送HTTP请求 post json 格式
- http post 请求参数格式是json
- DBInputFormat的key value 格式
- http报文格式、GET与POST的区别
- RestTemplate 发送json格式的http请求
- JAVA 实现HTTP POST请求报文格式分析
- HTTP POST请求报文格式分析与Java实现文件上传
- HTTP POST请求报文格式分析与Java实现文件上传
- HTTP POST请求报文格式分析与Java实现文件上传
- spark executor
- swift3.0 自定义Log
- libsvm在MATLAB下的编译问题
- BZOJ3670: [Noi2014]动物园
- POJ 2528 Mayor's posters (线段树区间赋值 + 离散化)
- java实现HTTP的post请求 key-value格式与json格式的区别
- Sublime Text3配置Node.js开发环境
- [bzoj2140]稳定婚姻 Tarjan
- Condition并发
- js 中的闭包
- Java线程:线程状态的转换
- 网易云配置ipv6
- iOS应用架构谈
- 彻底理解ThreadLocal