直接上工具类

直接调用即可,这个工具类会返回加载的网页中所有的链接,至于对链接怎么处理就是你们自己的事了, 亲测至今我所遇到的所有视频,它都可以捕获到其链接import android.app.Activity;

import android.graphics.Bitmap;

import android.net.http.SslError;

import android.os.Build;

import android.support.annotation.RequiresApi;

import android.view.ViewGroup;

import android.webkit.CookieManager;

import android.webkit.CookieSyncManager;

import android.webkit.SslErrorHandler;

import android.webkit.WebResourceRequest;

import android.webkit.WebResourceResponse;

import android.webkit.WebSettings;

import android.webkit.WebView;

import android.webkit.WebViewClient;

import android.widget.LinearLayout;

import java.util.Timer;

import java.util.TimerTask;

/**

* Created by Administrator on 2018/3/22.

*/

public class ParseWebUrlHelper {

private static ParseWebUrlHelper parseWebUrlHelper;

private String webUrl;

private Activity mAct;

private WebView webView;

private int timeOut = 20 * 1000;

private OnParseWebUrlListener onParseListener;

public static ParseWebUrlHelper getInstance() {

if (parseWebUrlHelper == null) parseWebUrlHelper = new ParseWebUrlHelper();

return parseWebUrlHelper;

}

public ParseWebUrlHelper init(Activity act, String url) {

this.mAct = act;

this.webUrl = url;

ViewGroup mainView = (ViewGroup) mAct.findViewById(android.R.id.content);

this.webView = new WebView(mAct);

this.webView.setLayoutParams(new LinearLayout.LayoutParams(1, 1));

mainView.addView(this.webView);

initWebSettings();

return this;

}

private void initWebSettings() {

WebView mWebView = this.webView;

mWebView.clearFocus();

WebSettings mWebSettings = mWebView.getSettings();

mWebSettings.setJavaScriptEnabled(true);

mWebSettings.setDefaultTextEncodingName("utf-8");

mWebSettings.setCacheMode(WebSettings.LOAD_DEFAULT);

mWebSettings.setPluginState(WebSettings.PluginState.ON);

mWebSettings.setDisplayZoomControls(false);

mWebSettings.setUseWideViewPort(true);

mWebSettings.setAllowFileAccess(true);

mWebSettings.setAllowContentAccess(true);

mWebSettings.setSupportZoom(true);

mWebSettings.setAllowContentAccess(true);

mWebSettings.setLoadWithOverviewMode(true);

mWebSettings.setBuiltInZoomControls(true);// 隐藏缩放按钮

mWebSettings.setUseWideViewPort(true);// 可任意比例缩放

mWebSettings.setLoadWithOverviewMode(true);// setUseWideViewPort方法设置webview推荐使用的窗口。setLoadWithOverviewMode方法是设置webview加载的页面的模式。

mWebSettings.setSavePassword(true);

mWebSettings.setSaveFormData(true);// 保存表单数据

mWebSettings.setJavaScriptEnabled(true);

mWebSettings.setTextZoom(100);

mWebSettings.setDomStorageEnabled(true);

mWebSettings.setSupportMultipleWindows(true);// 新加//我就是没有这一行,死活不出来。MD,硬是没有人写这一句!

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

mWebSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);

}

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {

mWebSettings.setMediaPlaybackRequiresUserGesture(true);

}

if (Build.VERSION.SDK_INT >= 16) {

mWebSettings.setAllowFileAccessFromFileURLs(true);

mWebSettings.setAllowUniversalAccessFromFileURLs(true);

}

mWebSettings.setJavaScriptCanOpenWindowsAutomatically(true);

mWebSettings.setLoadsImagesAutomatically(true);

mWebSettings.setAppCacheEnabled(true);

mWebSettings.setAppCachePath(mAct.getCacheDir().getAbsolutePath());

mWebSettings.setDatabaseEnabled(true);

mWebSettings.setGeolocationDatabasePath(mAct.getDir("database", 0).getPath());

mWebSettings.setGeolocationEnabled(true);

CookieManager instance = CookieManager.getInstance();

if (Build.VERSION.SDK_INT < 21) {

CookieSyncManager.createInstance(mAct.getApplicationContext());

}

instance.setAcceptCookie(true);

if (Build.VERSION.SDK_INT >= 21) {

instance.setAcceptThirdPartyCookies(mWebView, true);

}

mWebView.setWebViewClient(new MyWebViewClient());

enabledCookie(webView);//启用cookie

}

public ParseWebUrlHelper setLoadUrl(String url){

this.webUrl=url;

return this;

}

public ParseWebUrlHelper startParse(){

webView.loadUrl(this.webUrl);

return this;

}

/*启用cookie*/

private void enabledCookie(WebView web) {

CookieManager instance = CookieManager.getInstance();

if (Build.VERSION.SDK_INT < 21) {

CookieSyncManager.createInstance(mAct);

}

instance.setAcceptCookie(true);

if (Build.VERSION.SDK_INT >= 21) {

instance.setAcceptThirdPartyCookies(web, true);

}

}

public ParseWebUrlHelper setOnParseListener(OnParseWebUrlListener onParseListener) {

this.onParseListener = onParseListener;

return this;

}

private class MyWebViewClient extends WebViewClient {

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)

@Override

public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {

if(request.getUrl().toString().startsWith("intent")||request.getUrl().toString().startsWith("youku")){

return true;

}else{

return super.shouldOverrideUrlLoading(view, request);

}

}

@Override

public boolean shouldOverrideUrlLoading(WebView view, String url) {

if(url.startsWith("intent")||url.startsWith("youku")){

return true;

}else{

return super.shouldOverrideUrlLoading(view, url);

}

}

/*解决ssl证书问题*/

@Override

public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {

handler.proceed();

}

@Override

public WebResourceResponse shouldInterceptRequest(WebView view, String url) {

onParseListener.onFindUrl(url);

return super.shouldInterceptRequest(view, url);

}

@Override

public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

String url = request.getUrl().toString();

onParseListener.onFindUrl(url);

}

return super.shouldInterceptRequest(view, request);

}

@Override

public void onPageStarted(WebView view, String url, Bitmap favicon) {

// TODO: Implement this method

super.onPageStarted(view, url, favicon);

startConut();//加载超时处理

}

}

/*解决webview加载超时问题*/

private void startConut(){

final Timer timer=new Timer();

TimerTask timerTask=new TimerTask(){

@Override

public void run()

{

onParseListener.onError("解析视频超时,请检查网速或网络是否出现问题...");

timer.cancel();

timer.purge();

}

};

timer.schedule(timerTask,timeOut,1);

}

public interface OnParseWebUrlListener {

void onFindUrl(String url);

void onError(String errorMsg);

}

}

调用//初始化

this.parseWebUrlHelper=ParseWebUrlHelper.getInstance().init(this.mAct,"");

//解析网页中视频

parseWebUrlHelper.setOnParseListener(new ParseWebUrlHelper.OnParseWebUrlListener() {

@Override

public void onFindUrl(String url) {

Log.d("webUrl",url);

//*****处理代码

}

@Override

public void onError(String errorMsg) {

//****出错监听

}

问题

他人总结

android 视频url监测,Web逆向之通过Android中WebView获取网站视频真实链接相关推荐

  1. 如何在Wordpress中加密保护网站视频和网页内容?

    本教程将教您如何使用DRM加密软件来保护WordPress网站的视频/网页内容.保护WordPress的视频.文本.图像和JavaScript免受盗版. 在教育和众多商业领域中,Wordpress网站 ...

  2. Android 实现从网络获取视频URL显示在视频播放器(IjkVideoView)能全屏和保存视频到手机的功能

    一.测试 实现: 二.项目: 三.准备工作 1.添加权限,网络和读写 <uses-permission android:name="android.permission.INTERNE ...

  3. android根据url加载图片路径,初学Android——通过URL加载图片

    首先是框架: 创建一个进程: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceStat ...

  4. Android从url不产生cookie,如何从android.webkit.CookieManager获取所有cookie或cookie的URL

    主要是,我使用webview进入facebook.所以,我不知道哪些cookie被保存到CookieManager中.我不知道是否可能,但我知道如何做到这一点. 现在,我需要使用Jsoup获取页面.但 ...

  5. 网站视频解析 有的url资源放在浏览器能直接播放,有的却不行。

    1有的视频url放在浏览器地址栏,回车能直接播放 2.有的视频url却直接下载下来一个 很短暂的m3u8文件, 且不能播放 这时候把视频url放在 vlc 或者专门解析m3u8的网站上却能直接播放: ...

  6. Android 系统(202)---Android:这是一份全面 amp; 详细的Webview使用攻略

    Android:这是一份全面 & 详细的Webview使用攻略 前言 现在很多App里都内置了Web网页(Hybrid App),比如说很多电商平台,淘宝.京东.聚划算等等,如下图 京东首页 ...

  7. Android使用webview获取百度百家号网站源码

    Android使用webview获取网站源码 最近在使用webview去获取网页的源码,但是对于百度百家号的文章,网页的源代码获取出来只要标题,内容不见了,想问问有没有大佬知道这个问题.去用pytho ...

  8. 游戏陪玩平台系统中iOS 采集音视频及写入文件的实现

    在游戏陪玩平台系统中音视频采集包括两部分:视频采集和音频采集.在iOS中可以同步采集视频与音频,通过系统框架AVFoundation,可以帮助游戏陪玩平台系统采集音频与视频,对于视频还可以进行切换前后 ...

  9. 往微信图文中插入外链视频的方法(包含几种失败方法)

    往微信图文中插入外链视频的方法(包含几种失败方法) 几种不同方法 最常见方法 失败方法一:下载视频上传后台 利用windows 系统命令行对视频缓存的合成及转换 检查网页元素进行视频捕捉和保存 手机端 ...

最新文章

  1. LVS_DR实现(负载均衡)及LVS_DR+keepalived实现(高可用+负载均衡)
  2. mysql 主从同步不一致_涨知识!MySQL 主从同步原理原来是这样的
  3. 设计模式——建造者模式
  4. C#的变迁史07 - C# 4.0 之线程安全集合篇
  5. 函数计算如何访问 PostgreSQL 数据库
  6. 翻译是不是计算机常用的颜色模式,关于颜色的翻译
  7. java thread 线程_Java Thread类简述
  8. python有趣的代码-趣味至上主义:这5个有趣的Python库带你花式编码
  9. 春运来了,你的火车票备好了么?
  10. linux 单机跨进程通信
  11. Pandas loc/iloc用法详解
  12. 工科数学分析部分知识点整理
  13. nanomsg 高性能通信库_zeromq与nanomsg比较
  14. bzoj 1208 宠物收养所 Splay入门
  15. 数据结构算法Day01
  16. 织物缺陷图像识别算法
  17. MARC21与CNMARC对应关系
  18. 【JAVA】延迟队列DelayQueue的应用
  19. expected `;' before ‘iter’
  20. pixel2style2pixel(pSp)实现解读【一】 -- 理论层面

热门文章

  1. 微信小程序登录流程php,微信小程序登录流程​
  2. 招聘APP开发的功能特点大全
  3. 数据结构个人笔记 第三课 顺序表和单链表
  4. 触摸按键驱动芯片 TTY6852 调试,发现有时所有按键失灵,
  5. 作为一个J2EE软件攻城师
  6. matlab分析数据 楼层对房价的影响
  7. robot_iq二指手爪控制和robot_iq力传感器的接收
  8. android模拟器中,不能将文件拷贝到的/system分区的原因,以及自动化解决方法
  9. 软件测试的6大误区,测试小白必看!
  10. 苹果与 Epic 的第一战:两败俱伤!