android 视频url监测,Web逆向之通过Android中WebView获取网站视频真实链接
直接上工具类
直接调用即可,这个工具类会返回加载的网页中所有的链接,至于对链接怎么处理就是你们自己的事了, 亲测至今我所遇到的所有视频,它都可以捕获到其链接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获取网站视频真实链接相关推荐
- 如何在Wordpress中加密保护网站视频和网页内容?
本教程将教您如何使用DRM加密软件来保护WordPress网站的视频/网页内容.保护WordPress的视频.文本.图像和JavaScript免受盗版. 在教育和众多商业领域中,Wordpress网站 ...
- Android 实现从网络获取视频URL显示在视频播放器(IjkVideoView)能全屏和保存视频到手机的功能
一.测试 实现: 二.项目: 三.准备工作 1.添加权限,网络和读写 <uses-permission android:name="android.permission.INTERNE ...
- android根据url加载图片路径,初学Android——通过URL加载图片
首先是框架: 创建一个进程: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceStat ...
- Android从url不产生cookie,如何从android.webkit.CookieManager获取所有cookie或cookie的URL
主要是,我使用webview进入facebook.所以,我不知道哪些cookie被保存到CookieManager中.我不知道是否可能,但我知道如何做到这一点. 现在,我需要使用Jsoup获取页面.但 ...
- 网站视频解析 有的url资源放在浏览器能直接播放,有的却不行。
1有的视频url放在浏览器地址栏,回车能直接播放 2.有的视频url却直接下载下来一个 很短暂的m3u8文件, 且不能播放 这时候把视频url放在 vlc 或者专门解析m3u8的网站上却能直接播放: ...
- Android 系统(202)---Android:这是一份全面 amp; 详细的Webview使用攻略
Android:这是一份全面 & 详细的Webview使用攻略 前言 现在很多App里都内置了Web网页(Hybrid App),比如说很多电商平台,淘宝.京东.聚划算等等,如下图 京东首页 ...
- Android使用webview获取百度百家号网站源码
Android使用webview获取网站源码 最近在使用webview去获取网页的源码,但是对于百度百家号的文章,网页的源代码获取出来只要标题,内容不见了,想问问有没有大佬知道这个问题.去用pytho ...
- 游戏陪玩平台系统中iOS 采集音视频及写入文件的实现
在游戏陪玩平台系统中音视频采集包括两部分:视频采集和音频采集.在iOS中可以同步采集视频与音频,通过系统框架AVFoundation,可以帮助游戏陪玩平台系统采集音频与视频,对于视频还可以进行切换前后 ...
- 往微信图文中插入外链视频的方法(包含几种失败方法)
往微信图文中插入外链视频的方法(包含几种失败方法) 几种不同方法 最常见方法 失败方法一:下载视频上传后台 利用windows 系统命令行对视频缓存的合成及转换 检查网页元素进行视频捕捉和保存 手机端 ...
最新文章
- LVS_DR实现(负载均衡)及LVS_DR+keepalived实现(高可用+负载均衡)
- mysql 主从同步不一致_涨知识!MySQL 主从同步原理原来是这样的
- 设计模式——建造者模式
- C#的变迁史07 - C# 4.0 之线程安全集合篇
- 函数计算如何访问 PostgreSQL 数据库
- 翻译是不是计算机常用的颜色模式,关于颜色的翻译
- java thread 线程_Java Thread类简述
- python有趣的代码-趣味至上主义:这5个有趣的Python库带你花式编码
- 春运来了,你的火车票备好了么?
- linux 单机跨进程通信
- Pandas loc/iloc用法详解
- 工科数学分析部分知识点整理
- nanomsg 高性能通信库_zeromq与nanomsg比较
- bzoj 1208 宠物收养所 Splay入门
- 数据结构算法Day01
- 织物缺陷图像识别算法
- MARC21与CNMARC对应关系
- 【JAVA】延迟队列DelayQueue的应用
- expected `;' before ‘iter’
- pixel2style2pixel(pSp)实现解读【一】 -- 理论层面