Http网络访问

1.客户端连接服务器实现内部原理
用户在浏览器输入网址,通过http协议发出去,网址经过DNS域名解析,解析成指定的ip地址,并在80端口上监听用户的请求。服务器监听到请求之后,会以三种方式返回给客户端:HTML、XML、JSON。

2.GET方式和POST方式的差别

GET是从服务器上获取数据,POST是向服务器传送数据。
在客户端,GET方式在通过URL提交数据,数据在URL中可以看到;POST方式,数据放在HTML HEADER内提交。
get/post使用http的标准协议,用于编码和传送变量名/变量值对参数

3.HTTP返回请求数据的三种方式:
1)以HTML代码内容返回。
2)以XML字符串的形式返回,在以后的android开发中这种形式返回数据比较多。
3)以JSON对象形式返回,在网络流量上考虑JSON要比XML方式要好一些,便于解析。
在Android当中,一般使用xml和Json数据解析。

4.HttpURLConnection
在Android中,针对HTTP进行网络通信的方法主要有两种,一种是使用HttpURLConnection实现,另一种是使用HttpClient实现
在Android 6.0 中彻底的将Apache的HttpClient给移除掉了,使用HttpURLConnection

public class MainActivity extends AppCompatActivity {
    private Button btGet;
    private Button btClean;
    private Button btImage;
    private TextView tv;
    private ImageView iv;

    StringBuilder builder;
    String urlString = "https://www.baidu.com/";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btGet = (Button)findViewById(R.id.btGet);
        btClean = (Button)findViewById(R.id.btClean);
        btImage = (Button)findViewById(R.id.btImage);
        iv = (ImageView)findViewById(R.id.imageView);

        tv = (TextView)findViewById(R.id.tvContent);
        builder = new StringBuilder();

        btGet.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try{
                            //1)创建URL对象
                            URL url = new URL(urlString);
                            //2)打开网络连接
                            HttpURLConnection connection = (HttpURLConnection)url.openConnection();
                            //3)设置请求方式和超时时间
                            //Android默认采用的是GET请求
                            connection.setRequestMethod("GET");
                            connection.setConnectTimeout(5000);

                            //4)获取请求返回的输入流
                            InputStream inputStream = connection.getInputStream();
                            //5)读取输入流里的数据
                            byte[] buffer = new byte[1024];
                            int len = 0;
                            while((len = inputStream.read(buffer))!=-1){
                                builder.append(new String(buffer, 0, len));
                            }

                            //6)关闭连接
                            connection.disconnect();

                        }catch (MalformedURLException e){
                            e.printStackTrace();
                        }catch (IOException e){
                            e.printStackTrace();
                        }
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                              tv.setText(builder.toString());
                            }
                        });

                    }
                }).start();


            }
        });

        btClean.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                tv.setText("");
            }
        });
        //图片下载
        btImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try{
                            //创建URL对象
                            URL url = new URL("http://192.168.122.1:8080/18.png");
                            HttpURLConnection connection = (HttpURLConnection)url.openConnection();
                            //获取输入流
                            InputStream is = connection.getInputStream();
                            //从输入流中解析图片
                            final Bitmap bitmap = BitmapFactory.decodeStream(is);
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    iv.setImageBitmap(bitmap);
                                }
                            });


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

相关文章
相关标签/搜索