Ⅰ 安卓開發怎麼在APP內部調用手機系統瀏覽器打開指定html並獲取HTML的數據
android開發_如何調用 瀏覽器訪問網頁和Html文件
一、啟動android默認瀏覽器
Intent intent= new Intent();
intent.setAction('android.intent.action.VIEW');
Uri content_url = Uri.parse('http://www.cnblogs.com');
intent.setData(content_url);
startActivity(intent);
這樣子,android就可以調用起手機默認的瀏覽器訪問。
二、指定相應的瀏覽器訪問
1、指定android自帶的瀏覽器訪問
( 「com.android.browser」:packagename ;「com.android.browser.BrowserActivity」:啟動主activity)
Intent intent= new Intent();
intent.setAction('android.intent.action.VIEW');
Uri content_url = Uri.parse('http://www.cnblogs.com');
intent.setData(content_url);
intent.setClassName('com.android.browser','com.android.browser.BrowserActivity');
startActivity(intent);
2、啟動其他瀏覽器(當然該瀏覽器必須安裝在機器上)
只要修改以下相應的packagename 和 主啟動activity即可調用其他瀏覽器
intent.setClassName('com.android.browser','com.android.browser.BrowserActivity');
uc瀏覽器':'com.uc.browser', 'com.uc.browser.ActivityUpdate「
opera :'com.opera.mini.android', 'com.opera.mini.android.Browser'
qq瀏覽器:'com.tencent.mtt', 'com.tencent.mtt.MainActivity'
三、打開本地html文件
打開本地的html文件的時候,一定要指定某個瀏覽器,而不能採用方式一來瀏覽,具體示例代碼如下
Intent intent= new Intent();
intent.setAction('android.intent.action.VIEW');
Uri content_url = Uri.parse('content://com.android.htmlfileprovider/sdcard/help.html');
intent.setData(content_url);
intent.setClassName('com.android.browser','com.android.browser.BrowserActivity');
startActivity(intent);
關鍵點是調用了」content「這個filter。
以前有在win32編程的朋友,可能會覺得用這種形式」file://sccard/help.html「是否可以,可以很肯定的跟你說,默認的瀏覽器設置是沒有對」file「這個進行解析的,如果要讓你的默認android瀏覽器有這個功能需要自己到android源碼修改manifest.xml文件,然後自己編譯瀏覽器代碼生成相應的apk包來重新在機器上安裝。
大體的步驟如下:
1、打開 packages/apps/Browser/AndroidManifest.xml文件把加到相應的後面就可以了
2、重新編譯打包,安裝,這樣子,新的瀏覽器就支持」file「這個形式了
有興趣的可以去試試。
Ⅱ android studio 怎麼抓去網頁媒體資源
首先,也是很重要的一步,就是下載jar包,丟到libs裡面
Android studio玩家可以不下載jar包,在Gradle裡面加入
dependencies {undefined
compile 'org.jsoup:jsoup:1.9.2'
}復制代碼
然後,找到你心儀的網頁去抓取數據
這里我們我繼續使用美食的網頁,然後右鍵查看網頁源碼,或者按F12,接下來可以看到一大堆標簽:
Paste_Image.png
找到需要的,例如上圖這個 「美食天下」 ,可以看到 「美食天下」 是放在以
為節點的 中,要獲取這個「美食天下」,代碼可以這樣寫:
try {undefined
//從一個URL載入一個Document對象。
Document doc = Jsoup.connect("http://home.meishichina.com/show-top-type-recipe.html").get();
//選擇「美食天下」所在節點
Elements elements = doc.select("div.top-bar");
//列印 a標簽裡面的title
Log.i("mytag",elements.select("a").attr("title"));
}catch(Exception e) {undefined
Log.i("mytag", e.toString());
}復制代碼
接下來看一下列印出來的結果:
Paste_Image.png
Jsoup.connect(String url)方法從一個URL載入一個Document對象。如果從該URL獲取HTML時發生錯誤,便會拋出 IOException,應適當處理。
一旦擁有了一個Document,你就可以使用Document中適當的方法或它父類 Element和Node中的方法來取得相關數據。
public class Element extends Node
public class Document extends Element復制代碼
很多文章都是說一大堆原理然後放出一個簡單的例子,就跟我上面簡單的打了一個log一樣,然後發現用起來的時候是沒那麼簡單的。為了大家能不看文檔也可以直接使用(並且看不懂那一大堆標簽也可以用),我決定再舉一個例子(其實也就是比上面多打幾個log):
下圖紅色框框是我們要獲取的數據,可以看到他們對應的節點就是藍色圓圈裡面的
Paste_Image.png
廢話不多說上代碼
try {undefined
//還是一樣先從一個URL載入一個Document對象。
Document doc = Jsoup.connect("http://home.meishichina.com/show-top-type-recipe.html").get();
//「椒麻雞」和它對應的圖片都在復制代碼
中
Elements titleAndPic = doc.select("div.pic");
//使用Element.select(String selector)查找元素,使用Node.attr(String key)方法取得一個屬性的值
Log.i("mytag", "title:" + titleAndPic.get(1).select("a").attr("title") + "pic:" + titleAndPic.get(1).select("a").select("img").attr("data-src"));
//所需鏈接在
中的a標簽裡面
Elements url = doc.select("div.detail").select("a");
Log.i("mytag", "url:" + url.get(i).attr("href"));
//原料在
中
Elements burden = doc.select("p.subcontent");
//對於一個元素中的文本,可以使用Element.text()方法
Log.i("mytag", "burden:" + burden.get(1).text());
}catch(Exception e) {undefined
Log.i("mytag", e.toString());
}
大功告成,接下來看看log
Paste_Image.png
沒有問題!那麼教學可以結束了!
注意:
Jsoup.connect(String url)方法不能運行在主線程,否則會報NetworkOnMainThreadException
Ⅲ 如何讓Android獲得網頁上的數據
例子來自於android學習手冊,android學習手冊包含9個章節,108個例子,源碼文檔隨便看,例子都是可交互,可運行,源碼採用android studio目錄結構,高亮顯示代碼,文檔都採用文檔結構圖顯示,可以快速定位。360手機助手中下載,圖標上有貝殼
//第一種
/**獲取參數(ArrayList<NameValuePair> nameValuePairs,String url)後post給遠程伺服器
* 將獲得的返回結果(String)返回給調用者
* 本函數適用於查詢數量較少的時候
*/
public String posturl(ArrayList<NameValuePair> nameValuePairs,String url){
String result = "";
String tmp= "";
InputStream is = null;
try{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
}catch(Exception e){
return "Fail to establish http connection!";
}
try{
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"utf-8"));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
tmp=sb.toString();
}catch(Exception e){
return "Fail to convert net stream!";
}
try{
JSONArray jArray = new JSONArray(tmp);
for(int i=0;i<jArray.length();i++){
JSONObject json_data = jArray.getJSONObject(i);
Iterator<?> keys=json_data.keys();
while(keys.hasNext()){
result += json_data.getString(keys.next().toString());
}
}
}catch(JSONException e){
return "The URL you post is wrong!";
}
return result;
}
Ⅳ 如何抓取Android內嵌網頁地址
使用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)
Ⅳ android 正則表達式抓取網頁數據
java正則表達式:<h3>(.*?)</h3>
完整的Java程序如下:(android也是java程序,把主函數下的代碼拷貝到你的android程序中就可以了)
importjava.util.regex.Matcher;
importjava.util.regex.Pattern;
publicclassKKK{
publicstaticvoidmain(String[]args){
Strings="<h3>你是我的小金塊</h3>";
Stringregex="<h3>(.*?)</h3>";
Patternp=Pattern.compile(regex);
Matcherm=p.matcher(s);
while(m.find()){
System.out.println(m.group(1));
}
}
}
運行結果:
你是我的小金塊