Android之使用HTTP的get,post,HttpClient三种方式向服务器端提交文本数据
来源:互联网 发布:宠物美容剪刀 知乎 编辑:程序博客网 时间:2024/04/27 22:22
1、Get方式
- 方法:通过拼接url在url后添加相应的数据,如:http://172.22.35.112:8080/videonews/GetInfoServlet?title=霍比特人&timelength=100;
- 缺点:通过Get方式提交数据只能发送2K以内的数据,适合发送容量较小的数据,另外,如果发送的数据是中文,则需要对url和服务器端做相应的乱码处理(设置能显示中文的编码方式),否则会产生乱码问题。处理方式如下:
2、Post方式
- 方法:
- 使用请求参数组拼成实体数据,即按一定格式把数据组拼起来。如:title= title=霍比特人&timelength=100;
- 得到实体数据的字节数据,如:byte []entry=data.deleteCharAt(data.length()-1).toString().getBytes();
- 创建一个HttpURLConnection,并且进行相关设置。
- 设置HTTP请求的头字段,其中在不使用Cookie的情况下,一些头字段可以省略,不设置,但Content_Type和Content_Length是必须要设置的。如:
- 由于实体数据是由客户端流向服务器,可以取得输出流,然后通过输出流向外写数据(注意:只有当取得服务器的响应码时才会向外写数据。由此处可知前面把实体数据转换成byte字节是为了后面进行发送,代码之美完美体现。)。如:
客户端代码示例:
/** * HTTP请求 * @author kesenhoo * */public class HttpRequest {public static boolean sendXML(String path, String xml)throws Exception{byte[] data = xml.getBytes();URL url = new URL(path);HttpURLConnection conn = (HttpURLConnection)url.openConnection();conn.setRequestMethod("POST");conn.setConnectTimeout(5 * 1000);//如果通过post提交数据,必须设置允许对外输出数据conn.setDoOutput(true);conn.setRequestProperty("Content-Type", "text/xml; charset=UTF-8");conn.setRequestProperty("Content-Length", String.valueOf(data.length));OutputStream outStream = conn.getOutputStream();outStream.write(data);outStream.flush();outStream.close();if(conn.getResponseCode()==200){return true;}return false;}/** * 通过get方式提交参数给服务器 * @param path * @param params * @param enc * @return * @throws Exception */public static boolean sendGetRequest(String path, Map<String, String> params, String enc) throws Exception{//构造如下形式的字符串,这里的字符串依情况不同// ?method=save&title=435435435&timelength=89&//使用StringBuilder对象StringBuilder sb = new StringBuilder(path);sb.append('?');//迭代Mapfor(Map.Entry<String, String> entry : params.entrySet()){sb.append(entry.getKey()).append('=').append(URLEncoder.encode(entry.getValue(), enc)).append('&');}sb.deleteCharAt(sb.length()-1);//打开链接URL url = new URL(sb.toString());HttpURLConnection conn = (HttpURLConnection)url.openConnection();conn.setRequestMethod("GET");conn.setConnectTimeout(5 * 1000);//如果请求响应码是200,则表示成功if(conn.getResponseCode()==200){return true;}return false;}/** * 通过Post方式提交参数给服务器 * @param path * @param params * @param enc * @return * @throws Exception */public static boolean sendPostRequest(String path, Map<String, String> params, String enc) throws Exception{//需要构造的字符串形式如下:// title=dsfdsf&timelength=23&method=saveStringBuilder sb = new StringBuilder();//如果参数不为空if(params!=null && !params.isEmpty()){for(Map.Entry<String, String> entry : params.entrySet()){//Post方式提交参数的话,不能省略内容类型与长度sb.append(entry.getKey()).append('=').append(URLEncoder.encode(entry.getValue(), enc)).append('&');}sb.deleteCharAt(sb.length()-1);}//得到实体的二进制数据byte[] entitydata = sb.toString().getBytes();URL url = new URL(path);HttpURLConnection conn = (HttpURLConnection)url.openConnection();conn.setRequestMethod("POST");conn.setConnectTimeout(5 * 1000);//如果通过post提交数据,必须设置允许对外输出数据conn.setDoOutput(true);//这里只设置内容类型与内容长度的头字段//内容类型Content-Type: application/x-www-form-urlencoded//内容长度Content-Length: 38conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");conn.setRequestProperty("Content-Length", String.valueOf(entitydata.length));OutputStream outStream = conn.getOutputStream();//把实体数据写入是输出流outStream.write(entitydata);//内存中的数据刷入outStream.flush();outStream.close();//如果请求响应码是200,则表示成功if(conn.getResponseCode()==200){return true;}return false;}/** * 在遇上HTTPS安全模式或者操作cookie的时候使用HTTPclient会方便很多 * 使用HTTPClient(开源项目)向服务器提交参数 * @param path * @param params * @param enc * @return * @throws Exception */public static boolean sendRequestFromHttpClient(String path, Map<String, String> params, String enc) throws Exception{//需要把参数放到NameValuePairList<NameValuePair> paramPairs = new ArrayList<NameValuePair>();if(params!=null && !params.isEmpty()){for(Map.Entry<String, String> entry : params.entrySet()){paramPairs.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));}}//对请求参数进行编码,得到实体数据UrlEncodedFormEntity entitydata = new UrlEncodedFormEntity(paramPairs, enc);//构造一个请求路径HttpPost post = new HttpPost(path); //设置请求实体post.setEntity(entitydata);//浏览器对象DefaultHttpClient client = new DefaultHttpClient(); //执行post请求HttpResponse response = client.execute(post);//从状态行中获取状态码,判断响应码是否符合要求if(response.getStatusLine().getStatusCode()==200){return true;}return false;}}
0 0
- Android之使用HTTP的get,post,HttpClient三种方式向服务器端提交文本数据
- Android之使用HTTP的get,post,HttpClient三种方式向服务器端提交文本数据
- [Android开发]Android之使用HTTP的get,post,HttpClient三种方式向服务器端提交文本数据
- HTTP的get,post,HttpClient三种方式向服务器端提交文本数据
- Android之用HTTP的get,post,HttpClient三种方式向service提交文本数据
- Android----用HTTP的get,post,HttpClient三种方式向web service提交文本数据
- 使用get,post,httpclient三种方式向服务器提交文本数据
- 使用get,post,httpclient三种方式向服务器提交文本数据
- 使用get,post,httpclient三种方式向服务器提交文本数据
- Android之使用HTTP协议的Get/Post方式向服务器提交数据
- Android之使用HTTP协议的Get/Post方式向服务器提交数据
- Android之使用HTTP协议的Get/Post方式向服务器提交数据
- Android网络数据之向服务器提交数据的三种方式(get+post+AsyncHttpClient)
- Android Get,Post,AsyncHttpClient向服务器提交数据三种方式
- 使用HttpClient向服务器端提交数据
- Android学习之Http使用Post方式进行数据提交
- Android学习之Http使用Post方式进行数据提交
- Android学习之Http使用Post方式进行数据提交
- VS中常见bug问题解决方法——iostream.h&全工程的全局变量&光标阴影
- 面向对象的三个基本特征
- 第十七周 项目三 胖子伤不起啊
- uva 662(区间dp)
- linux基本命令学习笔记
- Android之使用HTTP的get,post,HttpClient三种方式向服务器端提交文本数据
- 解决svn Authorization failed错误
- mvc获取ip 穿过代理获取真正的ip
- 精通CSS+DIV网页样式与布局--初探CSS
- mlpack:可伸缩C++机器学习库
- 第十七周 项目四 日期结构体
- 二维数组vector<vector<int> >的建立
- eclipse支持c++11
- UIViewController的执行顺序