从WebView到http协议

WebView--->>

package com.app.cceasy.webviewtest;

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

public class MainActivity extends AppCompatActivity {

    private WebView webView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        webView = (WebView) findViewById(R.id.web_view);

        //设置浏览器的一些属性
        webView.getSettings().setJavaScriptEnabled(true); //让webview支持javascript脚本

        //加载网页的方式
        webView.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {

                view.loadUrl(url); //根据传入的参数加载新的网页

                return true; //表示当前webview可以处理打开新网页的请求,不用借助系统浏览器
            }
        });
        webView.loadUrl("http://www.baidu.com");

    }

}

实际界面:

对于 HTTP 协议,你只需要稍微了解一些就足够了,它的工作原理特别的简单,就是客户端向服务器发出一条HTTP 请求,服务器收到请求之后会返回一些数据给客户端,然后客户端再对这些数据进行解析和处理就可以了。是不是非常简单?一个浏览器的基本工作原理也就是如此了。

比如说上一节中使用到的 WebView 控件,其实也就是我们向百度的服务器发起了一条 HTTP 请求,接着服务器分析出我们想要访问的是百度的首页,于是会把该网页的 HTML 代码进行返回,
然后 WebView再调用手机浏览器的内核对返回的 HTML代码进行解析, 最终将页面展示出来。

简单来说,WebView 已经在后台帮我们处理好了发送 HTTP 请求、接收服务响应、解析
返回数据,以及最终的页面展示这几步工作,不过由于它封装得实在是太好了,反而使得我
们不能那么直观地看出 HTTP 协议到底是如何工作的。因此,接下来就让我们通过手动发送
HTTP 请求的方式,来更加深入地理解一下这个过程

在 Android 上发送 HTTP 请求的方式一般有两种,HttpURLConnection 和 HttpClient,

HttpURLConnection

package com.app.cceasy.httptest;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class MainActivity extends AppCompatActivity {

    public static final int SHOW_RESPONSE = 0;
    Handler handler;

    TextView tw4Response;
    Button bn4GetResponse;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tw4Response = (TextView) findViewById(R.id.id_textview_show_response);
        bn4GetResponse = (Button) findViewById(R.id.button_get_response);

        bn4GetResponse.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                sendRequestWithHttpURLConnection();

            }
        });

        handler = new Handler() {

            @Override
            public void handleMessage(Message msg) {
                String msgStr = (String) msg.obj;
                if(msg.what == SHOW_RESPONSE){
                    tw4Response.setText(msgStr);
                }

                super.handleMessage(msg);
            }
        };
    }

    private void sendRequestWithHttpURLConnection(){
        new Thread(){
            @Override
            public void run() {
                HttpURLConnection connection = null;
                try{
                    URL url = new URL("http://www.baidu.com/");
                    connection = (HttpURLConnection) url.openConnection();

                    connection.setRequestMethod("GET");
                    connection.setConnectTimeout(8000);
                    connection.setReadTimeout(8000);

                    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream()));

                    //connection.setRequestMethod("POST");
                    //BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream()));
                    //bufferedWriter.write("username=admin&password=123456");

                    String line;
                    StringBuilder response = new StringBuilder();

                    while ((line = bufferedReader.readLine()) != null){
                        System.out.print("-------------");
                        response.append(line);
                    }

                    Message message = new Message();
                    message.what = SHOW_RESPONSE;
                    message.obj = response.toString();

                    handler.sendMessage(message);

                }catch (Exception e){
                    e.printStackTrace();
                }finally {
                    if(connection != null){
                        connection.disconnect();
                    }
                }
            }
        }.start();
    }
}

实际界面:

时间: 2024-10-14 02:12:59

从WebView到http协议的相关文章

你不知道的 Android WebView 使用漏洞

前言 现在很多App里都内置了Web网页(Hyprid App),比如说很多电商平台,淘宝.京东.聚划算等等,如下图 上述功能是由 Android的WebView 实现的,但是 WebView 使用过程中存在许多漏洞,容易造成用户数据泄露等等危险,而很多人往往会忽视这个问题 今天我将全面介绍 Android WebView的使用漏洞 及其修复方式 阅读本文前请先阅读: Android开发:最全面.最易懂的Webview详解 最全面 & 最详细的 Android WebView与JS的交互方式 汇

android WebView详解,常见漏洞详解和安全源码(下)

上篇博客主要分析了 WebView 的详细使用,这篇来分析 WebView 的常见漏洞和使用的坑. 上篇:android WebView详解,常见漏洞详解和安全源码(上) 转载请注明出处:http://blog.csdn.net/self_study/article/details/55046348 对技术感兴趣的同鞋加群 544645972 一起交流. WebView 常见漏洞 WebView 的漏洞也是不少,列举一些常见的漏洞,实时更新,如果有其他的常见漏洞,知会一下我-- WebView

对Webview跨源攻击的理解

首先是addJavaScriptInterface漏洞: 有时候访问手机百度贴吧网页版本,网页上会有个按钮提示用手机应用打开.这种交互通常都是使用JS来实现,而WebView已经提供了这样的方法,具体用法如下: mWebView.getSettings().setJavaScriptEnabled(true); mWebView.addJavascriptInterface(new JSInterface(), "jsInterface"); 向WebView注册一个名叫“jsInte

Webview跨域访问风险

漏洞原理:WebView对象的行为是通过WebSettings类进行设置的,如果配置不当,攻击者就可以利用该漏洞可以打破Android沙盒隔离机制,从而通过某个应用来攻击其它应用,盗取其它应用本地保存的配置文件.敏感信息等. 主要利用了android.webkit.WebSettings类中setAllowFileAccess().setJavaScriptEnabled().setAllowFileAccessFromFileURLs().setAllowUniversalAccessFrom

论移动端Hybid开发

以下内容code地址:https://github.com/wytings/Hybrid 背景:公司业务的发展和开发需求升级,我们需要Hybrid了.市面上有很多开源的Hybrid框架给我们直接使用,但是经过一段时间的尝试与研究,我司最终选择自己开发一套相对简洁的Hybrid框架.很多人会疑惑,为什么还要造轮子?因为我们觉得这些"轮子",并不是很适合我们,我们评估后,觉得再造一个"轮子"反倒成本更低. 前言:我们应该要时刻注意到不要让自己的开发被新技术所引导或者迷惑

Http协议:客户端提交数据给服务端和从服务端获得数据,像WebView也是向百度的服务端发出一条Http请求,服务端返回HTML页面,客户端(浏览器)解析后展示出页面

提交数据和获得数据的方式有很多,这里介绍一种,使用HttpURLConnection来向服务器提交数据或者获得数据. 获得数据: //传入网址,获得请求网页数据(XML文件数据或JSON文件数据) public static String sendHttpRequest(String address) { HttpURLConnection connection=null; try { URL url=new URL(address); connection=(HttpURLConnection

与webView进行交互,webView小记

本文转载至 http://www.verydemo.com/demo_c101_i46895.html 一.与webView进行交互,调用web页面中的需要传参的函数时,参数需要带单引号,或者双引号(双引号需要进行转义在转义字符前加\),在传递json字符串时不需要加单引号或双引号. 1 -(void)webViewDidFinishLoad:(UIWebView *)webView 2 { 3     NSString *sendJsStr=[NSString stringWithFormat

ios中webview的高级用法

转自:http://www.cnblogs.com/gcb999/p/3178728.html 框架: webview与js的通信框架 #import "MJViewController.h" #import "MBProgressHUD+Add.h" @interface MJViewController () @end @implementation MJViewController - (void)viewDidLoad { [super viewDidLoa

善用iOS中webview(转)

iOS开发中webview和native code写这是一件纠结的事?我写这篇文章, 介绍一下我做iOS两年来总结的一些在webview和native code的配合上的一些经验和技巧,当然,都是基于互联网App的,希望对大家有所帮助. 首先提两句两者的优劣?webview与运维成本低, 更新几乎不依赖App的版本:但在交互和性能上与跟native code有很大差距.native code与之对应. 注,我这里不说HTML5,因为我认为,HTML5确实给web带入了一个新时代.这个时代是什么,