第一单元 HTTP基本使用方法

单元测试基本使用方法 1. 单测测什么 1.1 模块接口 调用所测模块时输入参数与模块的形式参数在个数、属性、顺序上是否匹配 所测模块在调用其他模块时,它输入给其他模块的参数在个数、属性、顺序上是否匹配 是否修改了只做输入用的形式参数 输出给标准函数的参数在个数、属性、顺序上是否匹配 全局变量的定义在各模块中是否一致 限制是否通过形式参数来传递 1.2 局部数据结构 不正确的或者不一致的数据类型 使用未赋值或者未初始化的变量 错误的初始值或者错误的默认值 变量名拼写错误 1.3 逻辑错误 不正确的计算、比较和控制流 阅读详情
  • 1.1. HTTP传输协议
    1.1.1什么是HTTP协议(概念)
    1.1.2HTTP协议的主要的特点
    1.1.3HTTP协议的会话方式
    1.1.4HTTP 1.0和HTTP1.1的区别
  • 1.2. GET与POST请求
    1.2.1 7种请求方式,其中最常用的是GET和POST
    1.2.2 请求头
    1.2.3 请求体
    1.2.4 响应码
  • 1.3. 文件上传
    1.3.1 图片上传
  • 1.4. 文件下载
    1.4.1 apk下载以及断点续传

1. 什么是Http?

超文本传送协议(http-Hypertext transfer protocol),定义了浏览器与服务器的通信。应用层的协议。

2. http特点

(1) 支持客户/服务器模式
(2) 灵活:支持任意类型的数据对象
(3) 无连接:无连接,服务器处理完端的请求后,断开连接。这种方式可以节省传输时间
(4) 无状态:对于事物处理没有记忆能力

3. 7种请求方式:

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协议中预留给能够将连接改为管道方式的代理服务器。

4. http1.0和http1.1区别

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

5. Get和Post请求区别

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

6. http请求协议

(1) 请求首行:
GET /jsp/get.jsp?name=yaotianxue&pass=123456 HTTP/1.1
POST /jsp/post.jsp HTTP/1.1
(2) 请求头信息:客户端告诉服务器我这边的信息
(3) 空行
(4) 请求体:get请求是没有请求体的,post有请求体

7. http响应协议

(1)响应首行:HTTP/1.1 200 OK
(2)响应头信息:Content-Length 服务器返回数据的总大小
(3)空行
(4)响应体:服务器返回的数据

8. 响应码

1xx
响应中——表示请求已经接受,继续处理
消息:一般是告诉客户端请求已经收到了,正在处理,别急
2xx
成功——表示请求已经被成功接收、理解、接受。
处理成功:一般表示请求收悉、我明白你要的、请求已受理、已经处理完成等信息
3xx
重定向——要完成请求必须进行更进一步的操作
重定向到其它地方:它让客户端再发起一个请求以完成整个处理。
4xx
客户端错误——请求有语法错误或请求无法实现
处理发生错误,责任在客户端:如客户端的请求一个不存在的资源,客户端未被授权,禁止访问等。
5xx
服务器端错误——服务器未能实现合法的请求。
处理发生错误,责任在服务端:如服务端抛出异常,路由出错,HTTP版本不支持等
200
OK //客户端请求成功,即处理成功,这是我们最希望看到的结果

303 Other //我把你redirect到其它的页面,目标的URL通过响应报文头的Location告诉你。
304 Not Modified //告诉客户端,你请求的这个资源至你上次取得后,并没有更改,你直接用你本地的缓存吧,
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL,找不到页面/页面已经被网站删除了
500 Internal Server Error //服务器发生不可预期的错误,此时应该查查服务端的日志了,肯定抛出了一堆异常
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

1.文件上传

package com.example.http;

import android.os.Build;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class MainActivity extends AppCompatActivity {
    private Button upLoad;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        upLoad = findViewById(R.id.upLoad);
    }
    public void click(View view) {
        new Thread(){
            @Override
            public void run() {
                super.run();
                if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
                    myLoad();
                }
            }
        }.start();
    }
    private void myLoad() {
        String start="--";//起始
        String bound="****"+ System.currentTimeMillis();//分割
        String end="\r\n";//结束
        //在根目录  mnt/shell/sdcard
        String filename= Environment.getExternalStorageDirectory()+"/http.txt";
        Log.i("TAG", "myLoad: "+filename);
        try {
            URL url=new URL("http://192.168.43.79/service/");
            HttpURLConnection connection= (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("POST");
            connection.setDoOutput(true);
            connection.setDoInput(true);

            //设置请求头
            connection.setRequestProperty("Connection","keep-alive");//保持长连接
            connection.setRequestProperty("Content-Type","multipart/form-data:boundary="+bound);
            DataOutputStream outputStream=new DataOutputStream(connection.getOutputStream());
//        outputStream outputStream1=connection.getOutputStream();

            //设置请求体
            StringBuffer stringBuffer=new StringBuffer();
            stringBuffer.append(start+bound+end);//第一行
            stringBuffer.append("Context-Disposition:form-data:name=\"file\":filename=\""+filename+"\""+end);//文件地址
            stringBuffer.append("Content-Type:multipart/form-data"+end);
            stringBuffer.append(end);//空行

            outputStream.write(stringBuffer.toString().getBytes());
            //写内容
            FileInputStream fileInputStream=new FileInputStream(new File(filename));//指定对象来读哪文件
            getAssets();
            int len=0;
            byte[] bytes=new byte[1024];
            while ((len=fileInputStream.read(bytes))!=-1){
               outputStream.write(new String(bytes,0,len).getBytes());
            }
            outputStream.write(end.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

2. 断点下载

package com.example.duandian;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.Toast;
import com.example.duandian.R;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class MainActivity extends AppCompatActivity {

    private ProgressBar pro;
    private Button start;
    private Button pause;
    private int endNum=2061223;

    private static final String TAG = "哒哒哒";
    private Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (msg.what==100) {
                Toast.makeText(MainActivity.this, "下载成功", Toast.LENGTH_SHORT).show();
            }else if(msg.what==101){
                pro.setMax(msg.arg1);
            }else if(msg.what==102){
                pro.setProgress(msg.arg1);
            }
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        pro = (ProgressBar) findViewById(R.id.progress);
        start = (Button) findViewById(R.id.start);
        pause = (Button) findViewById(R.id.pause);

        start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                getMp4("http://uvideo.spriteapp.cn/video/2019/0512/56488d0a-7465-11e9-b91b-1866daeb0df1_wpd.mp4");
            }
        });

    }
    public void getMp4(final String pathUrl){
        new Thread(){
            @Override
            public void run() {
                super.run();
//                Log.i(TAG, "run: 1111111111111111111111111");
//                getLength(pathUrl);
                Log.i(TAG, "run: 222222222222222222");
                downLoad(pathUrl);
            }
        }.start();
    }
    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();
                Log.i(TAG, "getLength: "+endNum);
                Message message = new Message();
                message.what=101;
                message.arg1=endNum;
                handler.sendMessage(message);
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public void downLoad(String url){
        int start=0;//开始
        int sum=0;//累积长度
        try {
            URL url1 = new URL(url);
            HttpURLConnection connection = (HttpURLConnection) url1.openConnection();
            connection.setRequestMethod("GET");
            connection.setRequestProperty("Range","bytes="+start+"-"+endNum);//0-1024   下载的范围
            if (connection.getResponseCode()==206) {//断点下载的OK响应码   普通的下载是200
                InputStream inputStream = connection.getInputStream();
                int len=0;
                byte[] bytes = new byte[10];
                String filePath= Environment.getExternalStorageDirectory()+"/a1705.mp4";
                RandomAccessFile file = new RandomAccessFile(filePath,"rw");
                file.seek(start);//0
                while ((len = inputStream.read(bytes)) != -1) {
                    file.write(bytes,0,len);
                    sum+=len;
                    Thread.sleep(1000);
                    Message message = new Message();
                    message.what=102;
                    message.arg1=sum;
                    handler.sendMessage(message);
                    if (sum==endNum) {
                        handler.sendEmptyMessage(100);
                    }
                }
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
深入探索FastAPI单元测试:使用TestClient轻松测试你的API 使用FastAPI进行单元测试时,一个重要的工具是TestClient类。TestClient类允许我们模拟对FastAPI应用程序的HTTP请求,并测试应用程序的响应。这使我们能够在不启动服务器的情况下对API进行全面的测试。 阅读详情

相关推荐

Transparent HTTP Proxy-开源

Transproxy与FreeBSD(ipfw和ipnat)或Linux透明代理功能(ipfwadm,ipchains和iptables)结合使用,可以透明地代理HTTP请求。

Http 的8种方法

文章目录最常用的http方法1. GET2. POSTGET 和 POST 的区别GET 和 POST 相同之处不常用的http方法3. HEAD4. PUT5. DELETE6. OPTIONS7. CONNECT8. TRACH HTTP 的工作方式是客户端与服务器之间的请求-应答协议。 web 浏览器可能是客户端,而计算机上的网络应用程序也可能作为服务器端。 最常用的http方法 在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST。 1. GET 在英文中 get 可以

weixin_49592687的博客 1万+

HTTP快捷方式:Android应用程序创建可触发任意HTTP请求的主屏幕快捷方式

Android的HTTP快捷方式 一个简单的Android应用程序,可让您创建可放置在主屏幕上的快捷方式。 单击每个快捷方式都会触发一个HTTP请求。 或直接 。 在上查找更多信息和文档。 通过帮助我或成为! 产品特点 HTTPHTTPS GET,POST,PUT,DELETE,PATCH,HEAD,OPTIONS和TRACE 基本身份验证,摘要身份验证和承载身份验证 自定义请求标头 自定义请求正文(文本或来自文件) 将文件上传为表单数据 选择接受所有证书(如果您知道自己在做什么) 支持HTTP代理 内置图标,支持Ipack图标和自定义图标 将响应显示为吐司,窗口或对话框,或

HTTP超详细教程

HTTP是超文本传输协议(Hypertext Transfer Protocol)的缩写,是一种用于传输数据的协议。它是基于TCP/IP协议的应用层协议,通常用于Web浏览器和Web服务器之间的通信。HTTP协议的主要特点是简单、灵活、易于扩展和支持多媒体等不同类型的数据传输。

小杨的博客 1万+

HTTP协议的9种请求方法

类似GET,但仅返回响应头部,用于检查资源元数据(如是否存在、修改时间等)。向服务器提交数据,常用于创建新资源或触发服务端处理操作(如提交表单)。获取服务器支持的HTTP方法,常用于跨域请求(CORS)的预检。用于请求指定资源,仅用于数据获取且不应对服务器数据产生副作用。用于完整替换或创建目标资源,具有幂等性(多次执行结果相同)。回显客户端请求,用于诊断请求路径中的中间服务器处理情况。建立与目标服务器的隧道连接,主要用于HTTPS代理通信。对资源进行部分更新,仅发送需修改的数据而非整体替换。

2301_79318558的博客 598

HTTP基本使用方法

Http基本使用方法一:HTTP传输协议1.什么是HTTP协议(概念)2.HTTP协议的主要的特点3.HTTP1.0和HTTP1.1的区别二:GET与POST请求1.七种请求方式,其中最常用的是GET和POST2.get请求和post请求的区别3.请求协议和响应协议4.响应码三:文件上传1.图片上传四:文件下载1.apk下载以及断点续传 一:HTTP传输协议 1.什么是HTTP协议(概念) HT...

SingleTigerkin的博客 2735

HTTP请求及Burp Suite的使用(更新中)

HTTP请求是客户端(通常是用户的网页浏览器)与服务器之间进行通信的一种方式。它遵循超文本传输协议(HTTP, Hypertext Transfer Protocol)的标准,用于在Web上传输数据。

Astronomia001的博客 2035

使用LocalTestServer对HTTP调用进行单元测试

有时候,当您正在对远程服务器进行HTTP调用的单元测试代码时。 您可能正在使用诸如Apache'sHttpClient或Spring的RestTemplate之类的库。 当然,您不想依靠远程服务进行单元测试。 除了涉及的开销(记住单元测试应该是快速的)之外,您根本不能依赖于执行测试期间可用的远程服务。 您可能还无法完全控制所有测试方案的响应。 考虑下面的简化示例。 Example...

最佳 Java 编程 521

dubbo单元测试调用_使用LocalTestServer对HTTP调用进行单元测试

dubbo单元测试调用 有时候,您正在对远程服务器进行HTTP调用的单元测试代码。 您可能正在使用诸如Apache'sHttpClient或Spring的RestTemplate之类的库。 当然,您不想依靠远程服务进行单元测试。 除了涉及的开销(请记住单元测试应该是快速的)之外,您根本不能依赖于在执行测试过程中可用的远程服务。 您可能还无法完全控制所有测试方案的响应。 考虑下面的简化示...

最佳 Java 编程 480

SpringBoot单元测试 (使用MockMVC 、Feign方式、Http Rest API 单元测试)

@RunWith 是junit提供的注解,表示该类是单元测试的执行类 SpringRunner是spring-test提供的测试执行单元类(是Spring单元测试中SpringJUnit4ClassRunner的新名字) @SpringBootTest 是执行测试程序的引导类 表明被注解方法的事务在完成后是否需要被回滚。 如果true,事务将被回滚,否则事务将被提交。 使用@Rollback接口来在类级别覆写配置的默认回滚标志。 Junit测试Controller(MockMVC使用),传输@Request

qq_40600507的博客 3512

常用的HTTP请求方法

前端日常发送HTTP请求一般只用到GET, POST两种方法,如果是在一个符合RESTful设计规范的应用中,常用到5个方法。 PS: RESTful设计规范是前后端接口设计的一种规范,遵从了这一规范,可以大大节约沟通的成本,RESTful中借用http各种方法的语义,约定了各接口的作用。 RESTful设计规范中的五个方法 一、GET方法 最常用的方法,它是发送一个请求来获取服务器上的资源,资源...

dreamingbaobei的博客 1万+

Google HTTP Client Library for Java单元测试技巧:Mock HTTP请求轻松搞定

Google HTTP Client Library for Java是一个功能强大的HTTP客户端库,提供了丰富的API来简化HTTP请求的处理。在开发过程中,编写可靠的单元测试至关重要,而Mock HTTP请求是测试HTTP客户端代码的关键技术。本文将分享如何使用MockHttpTransport和MockLowLevelHttpResponse等工具,轻松搞定单元测试中的HTTP请求模拟。

gitblog_00562的博客 1130

Jupyter Notebook的基本使用方法

下载Jupyter Notebook Jupyter Notebook最简单的下载方法就是使用Anaconda。 conda install jupyter notebook 使用这条命令就可以下载jupyter notebook。当然也可以使用pip下载。 启动jupyter notebook服务器 如果想要打开jupyter notebook。可以输入下面的命令。 jupyter notebo...

hpu_yangchen的博客 1022

【保姆级教程】Spring Boot 单元测试

一、 单元测试的概念 概念: 1. 单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。在Java中单元测试的最小单元是类。 2. 单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。执行单元测试,就是为了证明这 段代码的行为和我们期望是否一致。 单元测试引用: 1. 众所周知,通过spring initialize创建的Spring Boot项目会在Maven中自动携带很多starter依赖: 其中包含了一个...

wangxi06的专栏 7万+

Android中使用HTTP服务

在Android中,除了使用java.net包下的API访问HTTP服务之外,我们还可以换一种途径去完成工作。Android SDK附带了Apache的HttpClient API。Apache HttpClient是一个完善的HTTP客户端,它提供了对HTTP协议的全面支持,可以使用HTTP GET和POST进行访问。下面我们就结合实例,介绍一下HttpClient的使用方法。我们新建一个http项目,项目结构如图:在这个项目中,我们不需要任何的Activity,所有的操作都在单元测试类HttpTest.

LiuHe 7万+

【保姆级教程】SpringBoot单元测试,文末介绍Postman的基本使用

一、 单元测试的概念 概念: 单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。在Java中单元测试的最小单元是类。 单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。执行单元测试,就是为了证明这 段代码的行为和我们期望是否一致。 单元测试引用: 众所周知,通过spring initialize创建的Spring Boot项目会在Maven中自动携带很多starter依赖: 其中包含了一个名为spring-boot-sta

m0_52987358的博客 523

使用@SpringBootTest注解进行单元测试

@RunWith(SpringRunner.class) @SpringBootTest(classes = StartUpApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) 其中,classes属性指定启动类,SpringBootTest.WebEnvironment.RANDOM_...

yyjava的专栏 3万+
上一篇: 第二十单元 使用MediaPlayer+Service+Broadcast完成音乐播放器
下一篇: 第三单元 okhttp的使用
安久儿
博客等级 码龄7年 2粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值