Httpconnection Http

Http

Http 定义了与服务器交互的不同方法,最基本的方法有 4 种,分别是 GET,POST,
PUT,DELETE。URL 全称是资源描述符,我们可以这样认为:一个 URL 地址,它用于
描述一个网络上的资源,而 HTTP 中的 GET,POST,PUT,DELETE 就对应着对这个资
源的查,改,增,删 4 个操作。GET 一般用于获取/查询资源信息,而 POST 一般用于更
新资源信息。
两种请求方式的区别:

GET

GET 请求,请求的数据会附加在 URL 之后,以?分割 URL 和传输数据,多个参数用&
连接。URL 的编码格式采用的是 ASCII 编码,而不是 uniclde,即是说所有的非
ASCII 字符都要编码之后再传输。POST 请求:POST 请求会把请求的数据放置在
HTTP 请求包的包体中。因此,GET 请求的数据会暴露在地址栏中,而 POST 请求则
不会

传输数据的大小:在 HTTP 规范中,没有对 URL 的长度和传输的数据大小进行限
制。但是在实际开发过程中,对于 GET,特定的浏览器和服务器对 URL 的长度有限
制。因此,在使用 GET 请求时,传输数据会受到 URL 长度的限制。对于 POST,由
于不是 URL 传值,理论上是不会受限制的,但是实际上各个服务器会规定对 POST
提交数据大小进行限制,Apache、IIS 都有各自的配置。

Post

安全性 POST 的安全性比 GET 的高。这里的安全是指真正的安全,而不同于上面
GET 提到的安全方法中的安全,上面提到的安全仅仅是不修改服务器的数据。比如,
在进行登录操作,通过 GET 请求,用户名和密码都会暴露再 URL 上,因为登录页面
有可能被浏览器缓存以及其他人查看浏览器的历史记录的原因,此时的用户名和密码
就很容易被他人拿到了

Get 请求的代码 及断点续传文件

public class ClientThread extends Thread {
    
    

    MainActivity mt;
    String s;
    String filepath="/sdcard/zzt.mp4";

    public ClientThread(MainActivity mt, String s) {
    
    
        this.mt = mt;
        this.s = s;
    }
    int start=0;
    int end=0;
    @Override
    public void run() {
    
    
        try {
    
    
            URL url = new URL(s);

            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setReadTimeout(2000);
            urlConnection.setRequestMethod("GET");
            if(urlConnection.getResponseCode()==200){
    
    
                 end = urlConnection.getContentLength();
                Message message = Message.obtain();
                message.what=100;
                message.obj=end;
                mt.handler.sendMessage(message);

//
            }
        } catch (MalformedURLException e) {
    
    
            e.printStackTrace();
        } catch (IOException e) {
    
    
            e.printStackTrace();
        }


        try {
    
    
            URL url = new URL(s);
            HttpURLConnection urlConnection2 = (HttpURLConnection) url.openConnection();
            urlConnection2.setRequestMethod("GET");
            File file = new File(filepath);
            if(file.exists()){
    
    
                start  = (int) file.length();
                if(start==end){
    
    
                    mt.handler.sendEmptyMessage(300);
                }
            }
            urlConnection2.setRequestProperty("Range","bytes="+start+"-"+end);
            if(urlConnection2.getResponseCode()==206){
    
    

                InputStream is = urlConnection2.getInputStream();
                int len=0;
                byte[] b=new byte[1024];
                RandomAccessFile accessFile = new RandomAccessFile(filepath, "rw");
                accessFile.seek(start);
                int count=start;
                while ((len=is.read(b))!=-1){
    
    
                    accessFile.write(b,0,len);
                    count+=len;
                    Message message = Message.obtain();
                    message.what=200;
                    message.obj=count;
                    mt.handler.sendMessage(message);

                }



            }
            
        } catch (MalformedURLException e) {
    
    
            e.printStackTrace();
        } catch (IOException e) {
    
    
            e.printStackTrace();
        }


    }
}

post 请求代码

public class ClientLogin extends Thread {
    
    
    EditText ed_name,ed_pass;
    MainActivity mt;
    String ss;

    public ClientLogin(EditText ed_name, EditText ed_pass, MainActivity mt, String ss) {
    
    
        this.ed_name = ed_name;
        this.ed_pass = ed_pass;
        this.mt = mt;
        this.ss = ss;
    }

    @Override
    public void run() {
    
    

        try {
    
    
            URL url = new URL(ss);
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setRequestMethod("POST");
            urlConnection.setDoOutput(true);
            OutputStream outputStream = urlConnection.getOutputStream();
            outputStream.write(("phone="+ed_name.getText().toString()+"&passwd="+ed_pass.getText().toString()).getBytes());

            if(urlConnection.getResponseCode()==200){
    
    
                InputStream is = urlConnection.getInputStream();
                int len=0;
                byte[] b=new byte[1024];
                StringBuilder sb = new StringBuilder();
                while ((len=is.read(b))!=-1){
    
    
                    sb.append(new String(b,0,len));
                }

                Message message = Message.obtain();
                message.what=200;
                message.obj=sb.toString();
                mt.handler.sendMessage(message);
                Log.e("###s",sb.toString());


            }


        } catch (MalformedURLException e) {
    
    
            e.printStackTrace();
        } catch (IOException e) {
    
    
            e.printStackTrace();
        }


    }
}

在这里插入图片描述

SurfaceView 滚动歌词

package com.example.as3_day12_zuixuan;

import android.annotation.SuppressLint;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.media.MediaPlayer;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.widget.SeekBar;

import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Timer;
import java.util.TimerTask;

public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback {
    
    

    SurfaceView sfv;
    SurfaceHolder holder;
    SeekBar seekBar;

    int count=50;
    ArrayList<Music> list = new ArrayList<>();
    int position = 0;
    @SuppressLint("HandlerLeak")
    Handler handler = new Handler() {
    
    
        @Override
        public void handleMessage(Message msg) {
    
    
            super.handleMessage(msg);
            if (msg.what == 100) {
    
    

                long detion = Mediaplerutuils.getInstance().getDetion();
                long cur1 = Mediaplerutuils.getInstance().getCur();
                seekBar.setMax((int) detion);
                seekBar.setProgress((int) cur1);


                long cur = Mediaplerutuils.getInstance().getCur();
                if(position+1<=list.size()-1){
    
    
                    if (cur >= list.get(position+1).getTime()) {
    
    
                        position++;
                        Log.d("xxx","加");
                        for (int i=0;i<list.size();i++){
    
    
                            Music music = list.get(i);
                            int y = music.getY();
                            music.setY(y-50);
                        }

                    }
                }
                if(position-1>=0){
    
    
                    if (cur <= list.get(position).getTime()) {
    
    
                        Log.d("xxx","减");
                        position--;
                        for (int i=0;i<list.size();i++){
    
    
                            Music music = list.get(i);
                            int y = music.getY();
                            music.setY(y+50);
                        }
                    }
                }



            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        sfv = findViewById(R.id.sfv);
        seekBar=findViewById(R.id.seekbar);


        holder = sfv.getHolder();
        holder.addCallback(this);



        chat();
        Mediaplerutuils.getInstance().getplay("/mnt/shell/emulated/0/Music/凤凰传奇 - 最炫民族风(Live).mp3");

        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
    
    
            @Override
            public void run() {
    
    
                handler.sendEmptyMessage(100);
            }
        }, 0, 1);

        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
    
    
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
    
    

            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
    
    

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
    
    
                int progress = seekBar.getProgress();
                Mediaplerutuils.getInstance().getseekto(progress);
            }
        });


    }


    private void chat() {
    
    
        String s = "{\"sgc\":false,\"sfy\":false,\"qfy\":false,\"lyricUser\":{\"id\":29418062,\"status\":0,\"demand\":0,\"userid\":12907497,\"nickname\":\"Simfre\",\"uptime\":1441503572343},\"lrc\":{\"version\":5,\"lyric\":\"[by:简单de频率]\\n[00:00.000] 作曲 : 张超\\n[00:01.000] 作词 : 张超\\n[00:22.600]苍茫的天涯是我的爱\\n[00:26.280]绵绵的青山脚下花正开\\n[00:30.130]什么样的节奏是最呀最摇摆\\n[00:33.880]什么样的歌声才是最开怀\\n[00:37.750]弯弯的河水从天上来\\n[00:41.310]流向那万紫千红一片海\\n[00:45.330]火辣辣的歌谣是我们的期待\\n[00:48.880]一路边走边唱才是最自在\\n[00:52.630]我们要唱就要唱得最痛快\\n[00:56.610]你是我天边最美的云彩\\n[01:00.280]让我用心把你留下来(留下来)\\n[01:04.340]悠悠的唱着最炫的民族风\\n[01:07.840]让爱卷走所有的尘埃\\n[01:10.470](我知道)你是我心中最美的云彩\\n[01:15.380]斟满美酒让你留下来(留下来)\\n[01:19.380]永远都唱着最炫的民族风\\n[01:22.760]是整片天空最美的姿态\\n[01:26.700]哟啦啦呵啦呗\\n[01:28.520]伊啦嗦啦呵啦呗呀\\n[01:30.700]我听见你心中动人的天籁\\n[01:34.260]登上天外云霄的舞台\\n[01:37.530]\\n[01:53.250]苍茫的天涯是我的爱\\n[01:56.940]绵绵的青山脚下花正开\\n[02:00.820]什么样的节奏是最呀最摇摆\\n[02:04.570]什么样的歌声才是最开怀\\n[02:08.440]弯弯的河水从天上来\\n[02:12.000]流向那万紫千红一片海\\n[02:15.810]火辣辣的歌谣是我们的期待\\n[02:19.620]一路边走边唱才是最自在\\n[02:23.310]我们要唱就要唱得最痛快\\n[02:27.220]你是我天边最美的云彩\\n[02:30.920]让我用心把你留下来(留下来)\\n[02:34.920]悠悠的唱着最炫的民族风\\n[02:38.410]让爱卷走所有的尘埃\\n[02:41.410](我知道)你是我心中最美的云彩\\n[02:46.210]斟满美酒让你留下来(留下来)\\n[02:50.140]永远都唱着最炫的民族风\\n[02:53.460]是整片天空最美的姿态\\n[02:57.810]\\n[03:18.290]你是我天边最美的云彩\\n[03:21.910]让我用心把你留下来(留下来)\\n[03:26.030]悠悠的唱着最炫的民族风\\n[03:29.510]让爱卷走所有的尘埃\\n[03:32.260](我知道)你是我心中最美的云彩\\n[03:37.010]斟满美酒让你留下来(留下来)\\n[03:41.070]永远都唱着最炫的民族风\\n[03:44.570]是整片天空最美的姿态\\n[03:48.990]\\n[03:50.300]我听见你心中那动人的天籁\\n[03:53.990]就忽如一夜春风袭来满面桃花开\\n[03:57.860]我忍不住去采 我忍不住去摘\\n[04:01.620]我敞开胸怀为你等待\\n[04:04.340]\\n[04:05.840]你是我天边最美的云彩\\n[04:09.280]让我用心把你留下来\\n[04:13.010]悠悠的唱着最炫的民族风\\n[04:16.750]让爱卷走所有的尘埃\\n[04:19.500](我知道)你是我心中最美的云彩\\n[04:24.250]斟满美酒让你留下来(留下来)\\n[04:28.380]永远都唱着最炫的民族风\\n[04:31.750]是整片天空最美的姿态\\n[04:36.190]\\n\"},\"klyric\":{\"version\":0,\"lyric\":null},\"tlyric\":{\"version\":0,\"lyric\":null},\"code\":200}";
        try {
    
    
            JSONObject jsonObject = new JSONObject(s);
            JSONObject lrc = jsonObject.getJSONObject("lrc");
            String lyric = lrc.getString("lyric");

            String[] split = lyric.split("\\[|\\]");
            for (int i = 3; i < split.length; i += 2) {
    
    
                Music music = new Music();
                music.setX(200);
                music.setY(count+=50);
                music.setLyc(split[i + 1]);
                String s1 = split[i];
                String minute = s1.substring(0, 2);
                String sencond = s1.substring(3, 5);
                String curr = s1.substring(6, 9);

                long start = Integer.parseInt(minute) * 60 * 1000 + Integer.parseInt(sencond) * 1000 + Integer.parseInt(curr);
                music.setTime(start);
                list.add(music);
            }


        } catch (JSONException e) {
    
    
            e.printStackTrace();
        }


    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
    
    

        new Threads().start();
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
    
    

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
    
    

    }

    class Threads extends Thread {
    
    
        @Override
        public void run() {
    
    
            super.run();

            Paint paint = new Paint();
            paint.setColor(Color.BLUE);
            paint.setTextSize(50);
            Paint paint1 = new Paint();
            paint1.setColor(Color.RED);
            paint1.setTextSize(50);

            while (true) {
    
    
                Canvas canvas = holder.lockCanvas();
                if (canvas == null) {
    
    
                    break;
                }

                canvas.drawColor(Color.WHITE);
                for (int i=0;i<list.size();i++){
    
    
                    Music music = list.get(i);
                    canvas.drawText(music.getLyc(),music.getX(),music.getY(),paint);
                }

                Music music1 = list.get(position);
                canvas.drawText(music1.getLyc(),music1.getX(),music1.getY(),paint1);

                holder.unlockCanvasAndPost(canvas);

                }
            }
        }
    }



使用fiddler进行http抓包工具查看 详细信息 :该软件以后经常用到

Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据(指cookie,html,js,css等文件)。 Fiddler 要比其他的网络调试器要更加简单,因为它不仅仅暴露http通讯还提供了一个用户友好的格式

扫描二维码关注公众号,回复: 12395332 查看本文章

四.http请求协议
①请求首行:
GET /jsp/get.jsp?name=yaotianxue&pass=123456 HTTP/1.1
POST /jsp/post.jsp HTTP/1.1
②请求头信息:客户端告诉服务器我这边的信息

③空行
④请求体:get请求是没有请求体的,post有请求体

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

网络七层

应用层:应用程序,用户看的见 http协议
表示层:将人看的懂的转成计算机看的懂
会话层:发起一个连接
传输层:规定传输协议和端口号 tcp协议 udp协议
网络层:规定网络ip ip协议
数据链路层:
物理层:光缆、网线

猜你喜欢

转载自blog.csdn.net/weixin_43841463/article/details/96502754