Http基本使用方法

  • 一:HTTP传输协议
    • 1.什么是HTTP协议(概念)
    • 2.HTTP1.0和HTTP1.1的区别
  • 二:GET与POST请求
    • 1.八种请求方式,其中最常用的是GET和POST
    • 2.get请求和post请求的区别
    • 3.请求协议和响应协议
    • 4.响应码
  • 三:文件上传
  • 四:文件下载
    • 1.apk下载以及断点续传

一:HTTP传输协议

1.什么是HTTP协议(概念)


HTTP,超文本传输协议,英文全称是Hypertext Transfer Protocol,它是互联网上应用最为广泛的一种网络协议。HTTP是一种应用层协议,它是基于TCP协议之上的请求/响应式的协议,即一个客户端与服务器建立连接后,向服务器发送一个请求;服务器接到请求后,给予相应的响应信息。

2.HTTP1.0和HTTP1.1的区别

http1.0是非持续连接
http1.1是长久持续连接

二:GET与POST请求

1.八种请求方式,其中最常用的是GET和POST

1、OPTIONS
返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性
2、HEAD
向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。
3、GET
向特定的资源发出请求。它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。
4、POST
向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。
5、PUT
向指定资源位置上传其最新内容
6、DELETE
请求服务器删除Request-URL所标识的资源
7、TRACE
回显服务器收到的请求,主要用于测试或诊断
8、CONNECT
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

2.get请求和post请求的区别

get请求直接将请求参数暴露在url,不安全+一般用于向服务器请求数据
post请求将请求参数放在请求体里面,安全的+一般用于向服务器提交数据

3.请求协议和响应协议

1.请求协议:
请求首行:
请求头信息:客户端告诉服务器我这边的信息
空行
请求体:get请求是没有请求体的
2.响应协议:
响应首行:HTTP/1.1 200 OK
响应头信息:Content-Length服务器返回数据的总大小
空行
响应体:服务器返回的数据

4.响应码

200:OK,成功
400:服务器无法识别
500:服务器内部错误

三:文件上传

四:文件下载

public static void download(String url,String path)  {FileOutputStream fileOutputStream = null;InputStream inputStream=null;try {URL url1 = new URL(url);HttpURLConnection urlConnection = (HttpURLConnection) url1.openConnection();urlConnection.setReadTimeout(5000);urlConnection.setConnectTimeout(5000);if(urlConnection.getResponseCode()==200){inputStream = urlConnection.getInputStream();fileOutputStream = new FileOutputStream(path);//边读边写byte[] bytes=new byte[1024];int len=0;while((len=inputStream.read(bytes))!=-1){fileOutputStream.write(bytes,0,len);}}} catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}  finally {//关流if (fileOutputStream != null) {try {fileOutputStream.close();} catch (IOException e) {e.printStackTrace();}}if (inputStream != null) {try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}}
}

1.apk下载以及断点续传


清单文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.app4"><uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

代码

public class MainActivity extends AppCompatActivity {private ProgressBar bar;private Button startId,endId;private String path = "http://uvideo.spriteapp.cn/video/2019/0512/56488d0a-7465-11e9-b91b-1866daeb0df1_wpd.mp4";int endnum = 0;private Handler handler = new Handler(){@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);if (msg.what == 101){//读完了Toast.makeText(MainActivity.this, "下载完毕", Toast.LENGTH_SHORT).show();}else if (msg.what == 102){bar.setMax(endnum);}else if (msg.what == 103){bar.setProgress(msg.arg1);}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);startId = findViewById(R.id.start_id);endId = findViewById(R.id.pause_id);bar = findViewById(R.id.pro_id);startId.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {new MyThread().start();}});}class MyThread extends Thread{@Overridepublic void run() {super.run();getLength(path);downLoad(path);}}public void getLength(String url){URL url1 = null;try {url1 = new URL(url);HttpURLConnection  connection = (HttpURLConnection) url1.openConnection();if (connection.getResponseCode() == 200){endnum = connection.getContentLength();//文件最大值//是为了给进度条来设置Message message = new Message();message.what = 102;message.obj = endnum;}} catch (Exception e) {e.printStackTrace();}}//断点下载,更新进度,分批保存,是否是否完成public void downLoad(String url){int start = 0;int end = 1024;int sum = 0;//累计长度try {URL url1 = new URL(url);HttpURLConnection connection = (HttpURLConnection) url1.openConnection();connection.setRequestMethod("GET");connection.setRequestProperty("Range","bytes = "+start+"-"+end);//下载范围0-1024if (connection.getResponseCode() == 206){//断点下载的ok响应码是206InputStream inputStream = connection.getInputStream();//读后写入文件String filepath ="/sdcard/a1705.mp4";RandomAccessFile file = new RandomAccessFile(filepath,"rw");file.seek(start); //设置从哪开始写int len = 0;byte[] bys = new byte[1024];while ((len = inputStream.read(bys))!=-1){file.write(bys,0,len); //写文件内容sum+=len;//记录是否完成更新进度Thread.sleep(1000);Message message = new Message();message.what = 103;message.arg1 = sum;handler.sendMessage(message);//更新进度值if (sum == end){handler.sendEmptyMessage(101);}}}} catch (Exception e) {e.printStackTrace();}}
}

HTTP基本使用方法相关推荐

  1. 在 Oracle Enterprise Linux 和 iSCSI 上构建您自己的 Oracle RAC 11g 集群

    作者:Jeffrey Hunter 了解如何以低于 2,700 美元的费用在 Oracle Enterprise Linux 上安装并配置 Oracle RAC 11g 第 2 版开发集群. 本指南中 ...

  2. Java面试题大全2021版

    一.Java 基础 JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境. JRE:Java Run ...

  3. Kotlin协程使用,协程使用注意事项,协程中的await方法使用|不使用suspend使用协程

    参见 码云 协程使用方法一 (Dispatchers调度器模式) 指定不同线程.同线程会挂起并阻塞(挂起是不影响主线程执行,阻塞是同样的IO线程会阻塞) withContext(Dispatchers ...

  4. IDEA中将代码块封装为方法,IDEA代码重构快捷键

    IDEA中将代码块封装为方法 选中要转换的代码块,快捷键: Windows快捷键:Alt + Shift + M Mac快捷键:Alt + Command + M 如图:

  5. IDEA自动生成对象所有set方法

    idea中有一款插件能够生成对象所有的set方法,GenerateAllSetter :下载地址 步骤1:将下载好的压缩包放在自己记得的文件夹中,在idea中进行导入 步骤2:在本地选中刚才的压缩包, ...

  6. List元素互换,List元素转换下标,Java Collections.swap()方法实例解析

    Java Collections.swap()方法解析 jdk源码: public static void swap(List<?> list, int i, int j) {// ins ...

  7. java1.8新增超实用Map方法——Map.getOrDefault()和Map.value()方法详解

    1. Map.getOrDefault() 翻译一下官方解释: java.util.Map<K, V> V getOrDefault(Object key, V defaultValue) ...

  8. spring boot项目 中止运行 最常用的几种方法

    spring boot项目 中止运行 最常用的几种方法: 1. 调用接口,停止应用上下文 @RestController public class ShutdownController impleme ...

  9. Java Calendar.add()方法的使用,参数含义。指定时间差。

    cal.add()方法中的参数含义: 第一个参数如果是1则代表的是对年份操作,2是对月份操作,3是对星期操作,5是对日期操作,11是对小时操作,12是对分钟操作,13是对秒操作,14是对毫秒操作. 第 ...

  10. 设置select下拉框不可修改的→“四”←种方法

    设置select下拉框为不可修改的几种方法: 因为select的特殊性,导致它不能像input表单一样简单地设置一个readonly来限制修改,所以,我们需要进行别的操作! 1.为下拉框添加样式,可以 ...

最新文章

  1. ThinkPHP 3.2.2 实现持久登录 ( 记住我 )
  2. 长得类似铁甲小宝的机器人_铁甲小宝:小时候只顾看机器人忽略重点,长大后再看:是我太天真...
  3. 【Android 进程保活】提升进程优先级 ( 使用前台 Service 提高应用进程优先级 | 启动相同 id 的第二个前台 Service 关闭通知 )
  4. mybaits二:通过接口类,查询数据
  5. 那些关于区块链革命的事情
  6. js文件中定义全局配置文件
  7. 如何用pycharm对比两段代码(或两个文件的代码)
  8. python编写查询_如何用python脚本编写查询
  9. (递归7)生成可重集的排列
  10. CASE WHEN语句中加IN应该如何使用
  11. Analysis of variance(ANOVA)
  12. C# 文件查询管理器
  13. Echarts官网Json获取方式
  14. Win10系统下如何安装鼠标指针主题包
  15. vue-hotkey组件——v-hotkey:Vue 2.x指令,用于将热键绑定到组件 v-hotkey=keymap和computed结合使用
  16. 计算机文化基础试题每日一练15,【每日一练】2018教师[资格考编]笔试备考练习(9.6)...
  17. 题目 1097: 蛇行矩阵 题解
  18. 5分钟看懂│从深蓝到阿尔法狗,人机大战20年进化了什么?
  19. 如何找到appstore下载的系统dmg
  20. XDoc 基于Java注释生成API文档

热门文章

  1. 北京理工大学 计算机学院 李侃,吴昊_北京理工大学计算机学院
  2. 连续语音信号的短时倒谱分析及其参数用途
  3. Nginx搭建RTMP推拉流服务器
  4. 全网最硬核 JVM TLAB 分析(额外加菜) 8. 通过 JFR 监控 TLAB
  5. UDP TCP socket EtherCAT都是什么?
  6. EndeavourOS移动硬盘安装
  7. CLion配置STM32开发环境(JLink GDB Server)
  8. 谈一谈a:link、a:visited、a:hover、a:active的正确使用顺序
  9. 【NVMe2.0b 12】NVM 容量模型
  10. 王烁30天认知训练营推荐书单