android中的Http协议

Http协议是基于TCP/IP之上的一个协议
Http协议永远是客户端发起请求,服务器回送响应。
Http协议是一个无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系的。
TCP三次握手:
客户端(请求)synchronous服务器(返回)acknowledgement+synchronous客户端(响应)acknowledgement
Http请求的方式:
GET:获取Request-URL所标识的资源。
POST:在Request-URL所标识的资源后附加新的数据。
HEAD:请求获取由Request-URL所标识的资源的响应消息报头。
PUT:请求服务器存储一个资源。并用Request-URL作为其标识。
DELETE:请求服务器删除Request-URL所标识的资源
TRACE:请求服务器回送收到的请求信息,主要用于测试或者诊断。
CONNECT:保留将来使用
OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项和。
Http响应码:
200 OK//表示客户端请求成功
400 Bad request//客户端请求有语法错误,不能被服务器所理解。
401 Unauthorized//请求未经授权
403 Forbidden //服务器收到请求但是拒绝提供服务。
404 Not Found //请求资源不存在 eg:输入错误的URL
500 Internal Server Error //服务器发生不可预知的错误
503 Server Unavailable//服务器当前不能处理客户端的请求,一段时间后可以恢复正常。
Http协议的主要特点:
1:支持客户/服务器模式
2:简单快速:客户端向服务器端发送请求时,只发送相应的路径和请求方法,请求方法有:GET,POST,HEAD。每种方法规定了客户与服务器连接的类型不同。由于Http协议简单,所以规模小,导致连接速度很快。
3:灵活,Http允许传输任意数据类型的对象,并由Content-type加以标明。
4:无连接。无连接的含义是限制客户端与服务器的每一次连接只处理一个请求。这种方式可以节省传输时间。
5:无状态。无状态指的是协议对于事务处理没有记忆能力,如果后续需要处理前面的信息,必须重传。
网络系统结构:
(7层参考模型)
Open system interconnection (OSI)
网络通信功能分为七个层次:
(由高到低)
应用层(A)
表示层(p)
会话层(s)
传输层(T)
网络层(N)
数据链路层(DL)
物理层(PH)
TCP/IP 4层协议
(由高到低)
应用层(ftp,telnet)
传输层(tcp,udp)
网络层
主机到网络层

Http1.0和Http1.1协议的区别:
1.0每次请求都需要建立新的TCP连接。连接不可服用。
1.1请求建立在上次的TCP协议之上发送,减少了重复进行三次握手的开销,提高了效率。
1.1在Request消息头上多加了一个Host域。1.0则没有这个域。
1.1增加了OPTION,PUT,DELETE,TRACE,CONNECT这些Request方法。
使用webView访问百度首页的实例:
MainActivity.java

import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.webkit.WebView;

public class MainActivity extends AppCompatActivity {
    private WebView webView;
    private Handler handler = new Handler();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        webView = (WebView) findViewById(R.id.webV_1);

       new HttpThread("https://www.baidu.com",webView,handler).start();
    }
}

HttpThread.java

import android.os.Handler;
import android.webkit.WebView;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class HttpThread  extends Thread{
  private String url;
    private WebView webView;
    private Handler handler;
    public  HttpThread(String url,WebView webView,Handler handler){
        this.url =url;
        this.webView =webView;
        this.handler =handler;
    }

    @Override
    public void run() {
        try {
            URL httpurl = new URL(url);
            HttpURLConnection connection;
            connection = (HttpURLConnection) httpurl.openConnection();
            connection.setReadTimeout(5000);
            connection.setRequestMethod("GET");
            final StringBuffer sb = new StringBuffer();
            BufferedReader br =new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String str;
            while ((str = br.readLine()) != null){
                sb.append(str);
            }
            handler.post(new Runnable() {
                @Override
                public void run() {
                    webView.loadData(sb.toString(),"text/html;charset=utf-8",null);
                }
            });
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.asong.httpurlconnection.MainActivity">


    <WebView
        android:id="@+id/webV_1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />
</RelativeLayout>

使用imageView从网上下载一幅图片示例:
MainActivity.java

import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {
    private ImageView imageView;
    private Handler handler;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       imageView= (ImageView) findViewById(R.id.igv_1);
        new HttpThread("http://image.baidu.com/search/detail?ct=503316480&z=&tn=baiduimagedetail&ipn=d&word=%E5%B0%8F%E6%B8%85%E6%96%B0&step_word" +
                "=&ie=utf-8&in=&cl=2&lm=-1&st=-1&cs=328539268,1621399685&os=1890035889,1979762442&simid=0,0&pn=8&rn=" +
                "1&di=73300851170&ln=1000&fr=&fmq=1459502282690_R&fm=&ic=0&s=undefined&se=&sme=&tab=0&width=&height=" +
                "&face=undefined&is=&istype=2&ist=&jit=&bdtype=11&gsm=0&objurl=http%3A%2F%2Fimg3.duitang.com%2Fuploads%2Fitem%" +
                "2F201601%2F27%2F20160127192111_YTVGf.jpeg&rpstart=0&rpnum=0&ctd=1465886064174^3_1263X604%1",imageView,handler).start();
    }
}

HttpThread.java

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Environment;
import android.os.Handler;
import android.widget.ImageView;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class HttpThread extends Thread{
   private String url;
    private ImageView imageView;
    private Handler handler;

    public HttpThread(String url,ImageView imageView,Handler handler){
        this.url =url;
        this.imageView = imageView;
        this.handler =handler;
    }
    @Override
    public void run() {
        URL httpurl = null;
        try {
            httpurl = new URL(url);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        try {
            HttpURLConnection connection = (HttpURLConnection) httpurl.openConnection();
            connection.setConnectTimeout(5000);
            connection.setRequestMethod("GET");
            connection.setDoInput(true);
            InputStream in =connection.getInputStream();
            FileOutputStream out = null;
            File downloadFile =null;
            String fileName = String.valueOf(System.currentTimeMillis());
            if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
                File parent = Environment.getExternalStorageDirectory();
                downloadFile = new File(parent,fileName);

                out =new FileOutputStream(downloadFile);
            }
            byte[] b = new byte[2*1024];
            int len;
            if (out != null){
               while ((len =in.read(b)) !=-1){
                   out.write(b,0,len);
               }
            }
            final Bitmap bitmap = BitmapFactory.decodeFile(downloadFile.getAbsolutePath());
             handler.post(new Runnable() {
                 @Override
                 public void run() {
         imageView.setImageBitmap(bitmap);
                 }
             });
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.asong.httpurlconnection_1.MainActivity">

    <ImageView
        android:id="@+id/igv_1"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        />

</android.support.constraint.ConstraintLayout>

AndroidManifest.XML

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.asong.httpurlconnection_1">
<uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        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>

Http传递参数信息和传递方式GET和POST

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值