如何抓取Android内嵌网页地址

作者&投稿:漫泊 (若有异议请与网页底部的电邮联系)
android 如何获取系统内置的存储空间路径~

自己创建一个文件(一个工具类),设置它的路径 下面是一段检查SDCard有没有这个文件夹没有就创建一个if(checkSDCard()) { filePath = Environment.getExternalStorageDirectory()+File.separator+"aishop"; }else{ filePath = context.getCacheDir().getAbsolutePath()+File.separator+"aishop"; }路径自己设置就可以了

Android和H5之间的交互
hybrid App开发也不是什么新鲜事了,其中native和h5之间的交互则是必不可少的。Android中是如何和H5交互的?
1、webView加载页面
我们都知道在Android中是通过webView来加载html页面的,根据HTML文件所在的位置不同写法也不同:
//例如:加载assets文件夹下的test.html页面
mWebView.loadUrl("file:///android_asset/test.html")
//例如:加载网页
mWebView.loadUrl("http://www.baidu.com")

如果只是这样调用mWebView.loadUrl()加载的话,那么当你点击页面中的链接时,页面将会在你手机默认的浏览器上打开。那如果想要页面在App内中打开的话,那么就得设置setWebViewClient:
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
mWebView.loadUrl(url);
return true;
}
}
});

2、Android本地通过Java调用HTML页面中的JavaScript方法
想要调用js方法那么就必须让webView支持
WebSettings webSettings = mWebView.getSettings();
//设置为可调用js方法
webSettings.setJavaScriptEnabled(true);

若调用的js方法没有返回值,则直接可以调用mWebView.loadUrl("JavaScript:do()");其中do是js中的方法;若有返回值时我们可以调用mWebView.evaluateJavascript()方法:
mWebView.evaluateJavascript("sum(1,2)", new ValueCallback() {
@Override
public void onReceiveValue(String value) {
Log.e(TAG, "onReceiveValue value=" + value);
}
});

js代码如下:

function sum(a,b){
return a+b;
}
function do(){
document.getElementById("p").innerHTML="hello world";
}


2、js调用Android本地Java方法
在Android4.2以上可以直接使用@JavascriptInterface注解来声明,下面是在一个本地Java方法
public class JsInteration {
@JavascriptInterface
public String back() {
return "hello world";
}
}

定义完这个方法后再调用mWebView.addJavascriptInterface()方法:
mWebView.addJavascriptInterface(new JsInteration(), "android");

那么在js中怎么来调用呢?

function s(){
//调用Java的back()方法
var result =window.android.back();
document.getElementById("p").innerHTML=result;
}



4、拦截HTML页面中的点击事件
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//判断url拦截事件
if (url.equals("file:///android_asset/test2.html")) {
Log.e(TAG, "shouldOverrideUrlLoading: " + url);
startActivity(new Intent(MainActivity.this,Main2Activity.class));
return true;
} else {
mWebView.loadUrl(url);
return false;
}
}
});

以上就是Java调用js方法以及js调用Java方法的实现交互方式中的一种。下面给出完整代码:
mainActivity
public class MainActivity extends AppCompatActivity {
public static final String TAG = "MainActivity";
private WebView mWebView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mWebView = (WebView) findViewById(R.id.webView);
mWebView.loadUrl("file:///android_asset/test.html");
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
mWebView.addJavascriptInterface(new JsInteration(), "android");
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.equals("file:///android_asset/test2.html")) {
Log.e(TAG, "shouldOverrideUrlLoading: " + url);
startActivity(new Intent(MainActivity.this,Main2Activity.class));
return true;
} else {
mWebView.loadUrl(url);
return false;
}
}
});
}
//Android调用有返回值js方法
@TargetApi(Build.VERSION_CODES.KITKAT)
public void onClick(View v) {

mWebView.evaluateJavascript("sum(1,2)", new ValueCallback() {
@Override
public void onReceiveValue(String value) {
Log.e(TAG, "onReceiveValue value=" + value);
}
});
}
public class JsInteration {

@JavascriptInterface
public String back() {
return "hello world";
}
}
}

test.html





function sum(a,b){
return a+b;
}
function s(){
var result =window.android.back();
document.getElementById("p").innerHTML=result;
}




调用本地方法
点击


使用fiddler

关于android 获取请求地址的详细例子请参考android学习手册,android学习手册包含9个章节,108个例子,源码文档随便看,例子都是可交互,可运行,  源码采用android studio目录结构,高亮显示代码,文档都采用文档结构图显示,可以快速定位。360手机助手中下载,图标上有贝壳

Fiddler是类似代理服务器的形式工作,它能够记录所有你的电脑和互联网之间的http(S)通讯,可以查看、修改所有的“进出”的数据。使用代理地址:127.0.0.1, 默认端口:8888。打开Fiddler会自动设置代理,正常退出会自动注销代理,非正常退出上不了网,重起一次Fiddler,或直接在IE里取消代理即可。

2、方法优劣

[优点]:

1).Fiddler操作简单、方便、功能强大

2).能实时抓包,可模拟修改请求

2).只需要手机支持代理即可

3).适用广,安卓、Iphone、Ipad、WinPhone等支持代理手机均适用

 

[缺点]:

1).电脑需要安装Fiddler

2).测试手机需要支持Wifi

3).测试手机与电脑需要同一网络

4).所测APP需支持代理 

3、准备工作

1).检查电脑网络连接

a.使用同网络内的另一台电脑)ing本机,检查是否连通正常。 

原因:我之前测HTML5项目就发现Fiddler代理抓不到包,手机设置均正确,后发现是网络内找不到本机,本机防火墙设置问题。

另外需要关注是否同一网络,如果手机GPRS等上网,你在局域网内抓包...哥觉得你可以改行了... 

(约定:后文所述Fiddler所在电脑均称为本机) 

 

2).Fiddler安装

a.下载地址: http://fiddler2.com/get-fiddler

b.安装:省略(下一步...下一步即可)


3).Fiddler配置 

a.允许远程计算机连接Fiddler

菜单:Tools-> Fiddler Options->Connections,勾选"Allow remote computers to connect" 

 

注:8888为默认端口号,可修改,但需注意两点,一是本机空闲端口,二是手机代理设置时端口要一致。

 

b.配置可捕获HTTPS请求(*不需要捕获HTTPS,则忽略此步*) 

菜单:Tools-> Fiddler Options->Connections,勾选"Capture HTTPS CONNECTs"后

再勾选"Decrypt HTTPS traffic"、"Ignore server certificate errors"

 

注1:勾选项英文不认识,请Google,不另做解释

 

4).手机安装HTTPS证书(*不需要捕获HTTPS,则忽略此步*) 

a.首先确定Fiddler所在电脑的IP地址:例:192.168.8.8 

b.打开被测手机浏览器,访问http://192.168.8.8:8888,点"FiddlerRoot certificate" 然后安装证书

注:Iphone、Ipad安装则很简单,点击安装即可。Android安装稍微麻烦点,则需要先设置手机锁屏密码、PIN码,安装证书时会提示,按步骤走即可。 


4、实例

ThinkDrive抓包实例

一期测试时,涉汲到APP安全测试,因此需要查看传输数据是否存在明文密码等。

 

1).开启Fiddler,确定本机IP、Fiddler端口号

本机IP:192.168.8.8

Fiddler端口号:8888   

 

 

2).手机连接本机所在同网络Wifi,设置代理

a.代理主机名:Fiddler所在电脑IP

b.代理服务器端口: Fiddler使用的端口

 

3).APP操作,生成请求数据

a.例:登录  

 


 

b.例:退出登录

 

 

4).分析Fiddler抓包数据

a.例:登录请求分析

1).双击查看登录请求,选择WebForms或JSON等其他类标签,查看请求参数值,对照接口文档及你想要测试的点分析,请求是否正确,查看返回数据是否正确。

2).同帐号,不同密码;不同帐号,同密码等测试用例,测试多次登录后发现,密码仅为MD5加密,没有对密码进行很好的加密传输 

3).分析存在以下问题:

问题1:帐号密码采用http传输,帐号与密码(MD5值)局域网可以捕获; 

问题2:密码虽采用MD5加密,但传输未加密,简单密码可以在线解密(图中密码在线解密不到1秒:123qwe);

问题3:密码不解密也一样可以登录,通过A帐号在app登录,再用sniffer得到的B 帐号与密码(MD5值),使用Fiddler修改A帐号的请求完成B帐号在APP登录。 

注1:Fiddler功能使用,请Google或百度,此处不详说

注2:以上实例仅为参考,具体测试,以所相关业务及测试目标为导向进行测试分析。  

 

5、其他

本文虽主要对Android手机抓包举例,但其目的是说明,不管是电脑,还是手机,还是其他上网终端,都可以通过代理的方式来抓包(HTTS、HTTPS)




西充县17265696528: 怎么识别是app内嵌浏览器访问的页面 -
竹裴久威: 判断html 是在移动端应用(app),还是移动端浏览器中打开可以通过查看 UA来实现. UA是SIP协议中的一个逻辑实体,SIP是一个信令协议,代理的含义为代替用户处理信令协议,简单说就是替用户收发信令信息. UA简单是指用户的手机信...

西充县17265696528: 如何用hook抓取android手机的URL -
竹裴久威: 你这个用正则工具可以提取,具体参考下面截图,如果你想要采集链接的地址,其实根本不用这么复杂的来看网页源代码,就用我截图中用到的八爪鱼采集器,可视化的,要提取链接的话,直接点击网页上的链接,会弹出一个选项问你是否要采集链接

西充县17265696528: 如何抓取 android app 的 http 请求 -
竹裴久威: 两种方式:1. android机器本身用tcpdump,然后cap文件用wireshark查看;2. android机器设置一个代理到抓包工具的端口.

西充县17265696528: android怎么获取网页数据 -
竹裴久威: 下面介绍三种获取网页数据的代码例子来自于android学习手册,android学习手册包含9个章节,108个例子,源码文档随便看,例子都是可交互,可运行,源码采用android studio目录结构,高亮显示代码,文档都采用文档结构图显示,可以快...

西充县17265696528: android 正则表达式抓取网页数据 -
竹裴久威: Java正则表达式:(.*?) 完整的Java程序如下:(android也是java程序,把主函数下的代码拷贝到你的android程序中就可以了) import java.util.regex.Matcher; import java.util.regex.Pattern; public class KKK { public static void main(String[] args...

西充县17265696528: android中,现在我有一个网页的URL,现在我要用这个URL获取该网页的标题,如何做? -
竹裴久威: 和JAVA中一样,HttpURLConnection 得到IO流,得到网页源码,再摘取

西充县17265696528: android webview加载某个网页,之后通过这个网页调到了另一个页面,怎么获取这个页面的网址和源码 -
竹裴久威: mWebView.setWebViewClient(new WebViewClient(){ // 这个方法在用户试图点开页面上的某个链接时被调用 @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if(url!=null) { // 如果想继续加载目标页面则调用下面的语句 // view.loadUrl(url); // 如果不想那url就是目标网址,如果想获取目标网页的内容那你可以用HTTP的API把网页扒下来. } // 返回true表示停留在本WebView(不跳转到系统的浏览器) return true; } });

西充县17265696528: android 怎么获取到html里面的内容 -
竹裴久威: 如果你说的是抓取网页内容的话,用httpclient或者okhttp之类的工具获取到源码之后再用jsoup解析.

西充县17265696528: android如何获取网页数据 -
竹裴久威: 应该说的是获取webview中加载的网页数据,你可以通过jsbridge来实现

西充县17265696528: Android中如何获取网页源码 -
竹裴久威: public class GetHtmlCodeActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView textView = (TextView)this.findViewById(R.id.picture_...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网