httpclient post方式服务端获取不到数据的解决办法
来源:互联网 发布:淘宝浏览需要登录 编辑:程序博客网 时间:2024/04/29 21:20
最近做项目时,发现手机客户端通过http协议post方式上传数据到服务端,在服务器端通过request.getInputStream()能获取到相应的数据,但用request.getParameter()却获取不到数据。这是怎么回事呢,后来发现这种情况跟form表单的属性 enctype有关系。
HTML中的form表单有一个关键属性 enctype=application/x-www-form-urlencoded 或multipart/form-data。
1、enctype="application/x-www-form-urlencoded"是默认的编码方式,当以这种方式提交数据时,HTTP报文中的内容是:
<span style="font-size:12px;">POST /post_test.php HTTP/1.1 Accept-Language: zh-CNUser-Agent: Mozilla/4.0 Content-Type: application/x-www-form-urlencoded Host: 192.168.12.102Content-Length: 42Connection: Keep-AliveCache-Control: no-cache title=test&content=%B3%AC%BC%B6%C5%AE%C9%FA&submit=post+article </span>
Servlet的API提供了对这种编码方式解码的支持,只需要调用ServletRequest 类中的getParameter()方法就可以得到表单中提交的数据。
2、在传输大数据量的二进制数据时,必须将编码方式设置成enctype="multipart/form-data",当以这种方式提交数据时,HTTP报文中的内容是:
<span style="font-size:12px;">POST /post_test.php?t=1 HTTP/1.1Accept-Language: zh-CNUser-Agent: Mozilla/4.0 Content-Type: multipart/form-data; boundary=---------------------------7dbf514701e8Accept-Encoding: gzip, deflateHost: 192.168.12.102Content-Length: 345Connection: Keep-AliveCache-Control: no-cache -----------------------------7dbf514701e8Content-Disposition: form-data; name="title"test-----------------------------7dbf514701e8Content-Disposition: form-data; name="content"....-----------------------------7dbf514701e8Content-Disposition: form-data; name="submit"post article-----------------------------7dbf514701e8--</span>
如果以这种方式提交数据就要用request.getInputStream()或request.getReader()来获取提交的数据 ,用request.getParameter()是获取不到提交的数据的。
最后注意request.getParameter()、request.getInputStream()、request.getReader()这三种方法是有冲突的,因为流只能被读一次。
比如:
当form表单内容采用enctype=application/x-www-form-urlencoded编码时,先通过调用request.getParameter()方法获取数据后,再调用request.getInputStream()或request.getReader()已经获取不到流中的内容了,因为在调用request.getParameter()时系统可能对表单中提交的数据以流的形式读了一次,反之亦然。
当form表单内容采用enctype=multipart/form-data编码时,调用request.getParameter()获取不到数据,即使已经调用了request.getParameter()方法也可以再通过调用request.getInputStream()或request.getReader()获取表单中的数据,但request.getInputStream()和request.getReader()在同一个响应中是不能混合使用的,如果混合使用会抛异常的。
- httpclient post方式服务端获取不到数据的解决办法
- HttpURLConnection方式、HttpClient方式发送get、post数据给服务端
- http的post方式连接服务器,发送数据到服务端,并获取服务端的数据
- httpclient使用post方式发送json数据,以及服务端的接收
- [Android]Http通信,HttpService服务端通过getEntity获取HttpClient客户端Post上来的数据
- HttpClient get和HttpClient Post请求的方式获取服务器的返回数据
- HttpClient get和HttpClient Post请求的方式获取服务器的返回数据
- Java 通过httpClient Post方式提交xml,并从服务端返回数据
- Java 通过HttpClient Post方式提交json,并从服务端返回json数据
- 在phpstorm中利用post方法提交form表单后,在响应页面获取不到数据的解决办法
- 前台post提交表单时获取不到数据的原因
- php表单提交时获取不到post数据的解决方法
- 使用HttpClient的POST方式
- get/post 方式,form/数据的获取
- ashx 获取post数据的方式
- ajax post request 获取不到数据
- HttpClient通过Post方式发送Json数据
- HttpClient Post请求方式请求数据
- 前端工作第一月小结 欢迎指正
- Openfire源码分析----程序启动
- eclipse代码自动提示设置、如何配置eclipse的代码自动提示功能
- linux 系统中Mysql在线安装(Ubuntu)
- ZooKeeper管理员指南——部署与管理ZooKeeper
- httpclient post方式服务端获取不到数据的解决办法
- uva 424 Integer Inquiry
- C#多线程实现等待提示窗体
- windows下调试linux0.11
- 堆排序
- GDAL官网 OGR API Tutorial学习笔记三:Writting To OGR(2)
- js中的delete机制1
- 开篇,写点什么
- 设计模式之单例模式