手动get post请求网络(面向http协议向服务器提交数据)
来源:互联网 发布:自学数据库视频教程 编辑:程序博客网 时间:2024/05/21 04:23
手动写这两种请求网络方式,都是些基础,但是么得基础,如何更好的理解第三方库呢,说白了第三方库不也是对基础的封装嘛。
话不多说,代码拉上来!
呃 wait... 先来说下两种方式的原理和不同,采用HttpUrlConnection
Get请求
原理:把要提交的数据组拼到url后面
* 数据长度不超过4kb,IE超过1Kb会摒弃掉后面的数据
优点:代码书写简单
缺点:不安全
这个方法是流转换成字符串的工具类
private void requestNetWorkGet() { try { //把要提交的数据放在url里,accounts pwd为用户输入 String path = "http://192.168.1.100:8080/web/LoginServer" + "?accounts = " + accounts + "&pwd = " + pwd; //创建一个Url URL url = new URL(path); //用url打开连接 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); //设置请求参数 conn.setRequestMethod("GET"); conn.setReadTimeout(3000); conn.setConnectTimeout(3000); //获取状态码 int code = conn.getResponseCode(); //* 2xxx成功 3xxx重定向 4xxx资源错误 5xxx服务器错误 if (code == 200) { //获取服务器返回的输入流 InputStream is = conn.getInputStream(); //将溜流转换成字符串 String text = StreamUtils.parseStream(is); //拿到这个text可以在子线程中用Toast弹出来,用来测试请求成功与否 这里我就不继续做了 } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; }}public static String parseStream(InputStream is) { try { //内存输出流 效率高 ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024 * 8]; int len = -1; //读取流 while ((len = is.read(buffer)) != -1) { baos.write(buffer, 0, len); } //拿到二进制的数据 byte[] byteArray = baos.toByteArray(); //默认的编码还是utf-8 return new String(byteArray); } catch (Exception e) { e.printStackTrace(); return null; }}
Post请求
原理:把数据放到经过Url编码的表单中去提交
优点:安全
缺点:代码书写相比get繁琐
private void requestNetWorkPost() { try { //把要提交的数据放在url里,注意:这里与GET方式不一样 String path = "http://192.168.1.100:8080/web/LoginServer"; //创建一个Url URL url = new URL(path); //用url打开连接 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); //设置请求参数 conn.setRequestMethod("Post"); conn.setConnectTimeout(3000); //添加两个请求头 String t = "accounts = " + accounts + "&pwd = " + pwd; conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); conn.setRequestProperty("Content-length", String.valueof(t.length())); //生命声明要给服务器写数据 conn.setDoOutput(true); conn.getOutputStream().write(t.getBytes()); //获取状态码 int code = conn.getResponseCode(); //* 2xxx成功 3xxx重定向 4xxx资源错误 5xxx服务器错误 if (code == 200) { //获取服务器返回的输入流 InputStream is = conn.getInputStream(); //将溜流转换成字符串 String text = StreamUtils.parseStream(is); //拿到这个text可以在子线程中用Toast弹出来,用来测试请求成功与否 这里我就不继续做了 } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; }}
两种请求方式的不同:(1)url不一样
(2)请求方式不一样
(3)post需要添加两个请求头
(4)post需要声明给服务器写数据
HttpClient在android6.0以后已经不再提供org.apache.http.*,因为HTTP请求比Socket多很多,我在这里也就不在详细编写。
当然,有很多网络框架Volley、Android-async-http(基于HttpClient库)、Afinal、xUtils、OKHttp、retrofit、
框架都是对基本的封装,各个框架的优缺点等等我先不在这篇博文说,希望大家在基础上,把框架的源码也能读懂。
滴水穿石 go for it!
阅读全文
0 0
- 手动get post请求网络(面向http协议向服务器提交数据)
- 网络编程(二):http的get和post协议向服务器提交数据
- Android之使用HTTP协议的Get/Post方式向服务器提交数据
- Android之使用HTTP协议的Get/Post方式向服务器提交数据
- Android之使用HTTP协议的Get/Post方式向服务器提交数据
- Android网络数据之向服务器提交数据的三种方式(get+post+AsyncHttpClient)
- http post 协议 向服务器提交图片
- 网络请求,HTTP协议 ,GET,POST
- Android 向服务器提交数据(GET-POST-AsyncHttpClient)
- 向服务器提交数据(GET-POST-AsyncHttpClient)
- Android向服务器提交数据(方式:get、post、AsyncHttpClient )
- Android之向服务器提交数据(POST,GET,AsyncHttpClient)
- Android 向服务器提交数据(GET-POST-AsyncHttpClient)
- Android (向服务器提交数据Get-Post)
- Android-向服务器提交数据(GET-POST-AsyncHttpClient)
- android之向服务器提交数据(GET,POST,AsyncHttpClient)
- android中用get和post方式向服务器提交请求
- tomcat服务器与Http协议之请求(get请求、post请求)和响应
- sql 字符串截取的函数
- Flex 布局教程:语法篇
- 作业
- 关于暴力与打表的重要性
- 第九周项目二 二叉树遍历递归算法
- 手动get post请求网络(面向http协议向服务器提交数据)
- 事件冒泡,事件捕获,事件
- 如何设置UIAlertAction提示信息的部分字体的颜色
- 【蓝桥杯】【平方怪圈】
- linux下的文件权限(1)---普通的读写执行权限和ls命令详解
- Android利用android:indeterminateDrawable来实现ProgressBar三种方式
- H5模拟面试题
- MongoDB、Cassandra 和 HBase 三种 NoSQL 数据库比较
- 第8周项目1-建立顺序串的算法库