android中获取网页cookie的工具方法
2017-11-07 15:41
405 查看
1.应用场景
我自己的应用场景是,做一个股票分时图控件demo,需要抓取同花顺网站上的分时图数据,但是这个分时图数据的链接做了cookie校验,直接用httpurlconnection访问,返回403。这个分时图数据的链接在浏览器上也是不能直接打开的,先要在浏览器上访问同花顺股票的其他网页链接,网页里面会加载一段js代码,js代码会设置cookie。这个工具类就是模仿浏览器,先加载普通网页,得到网页里js代码设置的cookie。
2.实现原理
由于我对http协议没那么熟悉,js代码更是完全不了解,所以想到了用android系统提供的WebView方式,先用WebView加载同花顺普通网页,在WebView设置的WebClient的回调中,通过系统API获取到cookie数据。
3.工具类源码
4.下面再贴出上面提到的获取同花顺股票分时图数据的代码
我自己的应用场景是,做一个股票分时图控件demo,需要抓取同花顺网站上的分时图数据,但是这个分时图数据的链接做了cookie校验,直接用httpurlconnection访问,返回403。这个分时图数据的链接在浏览器上也是不能直接打开的,先要在浏览器上访问同花顺股票的其他网页链接,网页里面会加载一段js代码,js代码会设置cookie。这个工具类就是模仿浏览器,先加载普通网页,得到网页里js代码设置的cookie。
2.实现原理
由于我对http协议没那么熟悉,js代码更是完全不了解,所以想到了用android系统提供的WebView方式,先用WebView加载同花顺普通网页,在WebView设置的WebClient的回调中,通过系统API获取到cookie数据。
3.工具类源码
package com.rzc.util; import android.app.Activity; import android.text.TextUtils; import android.webkit.CookieManager; import android.webkit.WebView; import android.webkit.WebViewClient; /** * Created by rzc on 17/11/7. */ public class CookieUtil { public static void getCookie(Activity activity, final String url, final OnCookieLoadedListener cookieLoadedListener) { final WebView webView = new WebView(activity); webView.setWebViewClient(new WebViewClient() { public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); if (cookieLoadedListener != null) { CookieManager cookieManager = CookieManager.getInstance(); String cookie = cookieManager.getCookie(url); if (!TextUtils.isEmpty(cookie)) { webView.setWebViewClient(null); cookieLoadedListener.onCookieLoaded(cookie); } } } }); webView.getSettings().setJavaScriptEnabled(true); webView.loadUrl(url); } public interface OnCookieLoadedListener { void onCookieLoaded(String cookie); } }
4.下面再贴出上面提到的获取同花顺股票分时图数据的代码
//这里code是股票代码,比如工商银行的601398;cookie通过上面的工具方法得到,工具方法的url参数为"http://stockpage.10jqka.com.cn/" + code private static void doDownload(String code, String cookie) { String url = "http://d.10jqka.com.cn/v2/time/hs_" + code + "/last.js"; HttpURLConnection connection = null; try { connection = (HttpURLConnection) new URL(url).openConnection(); connection.setRequestMethod("GET"); connection.setConnectTimeout(10 * 1000); connection.setReadTimeout(10 * 1000); //同花顺网站做了cookie跟referer的校验,referer是固定的,cookie会隔断时间就更新 connection.setRequestProperty("cookie", cookie); connection.setRequestProperty("referer", "http://stockpage.10jqka.com.cn/HQ_v3.html"); int responseCode = connection.getResponseCode(); BufferedReader br = null; StringBuilder sb = new StringBuilder(); if (responseCode == HttpURLConnection.HTTP_OK) { br = new BufferedReader(new InputStreamReader(connection.getInputStream())); String line = null; while ((line = br.readLine()) != null) { sb.append(line).append("\n"); } br.close(); System.out.println(br.toString());//这里就是获取到分时图数据 } else { if (responseCode == HttpURLConnection.HTTP_FORBIDDEN) { //同花顺服务器做了cookie校验,调用这个方法如果捕捉到Error,则用获取cookie的工具方法刷新得到最新的cookie再调用此方法重试 throw new Error("403"); } } } catch (Exception e) { e.printStackTrace(); } finally { if (connection != null) { try { connection.disconnect(); } catch (Exception e) { e.printStackTrace(); } } } }
相关文章推荐
- Android工具方法- 获取当前日期是星期几
- Android Webview新认识(获取cookie,所加载网页内的链接的url)
- Android中WebView获取网页中标题 ,内容, 图片的方法
- 【android初级】之Android获取网页数据的方法总结
- 爬虫 Http请求,urllib2获取数据,第三方库requests获取数据,BeautifulSoup处理数据,使用Chrome浏览器开发者工具显示检查网页源代码,json模块的dumps,loads,dump,load方法介绍
- android获取网页数据的方法
- 浅谈 php 采用curl 函数库获取网页 cookie 和 带着cookie去访问 网页的方法!!!!
- android初级之Android获取网页数据的方法总结
- 网页爬虫之cookie自动获取及过期自动更新的实现方法
- 转载 Android获取网页数据的方法总结
- Python获取网页指定内容(BeautifulSoup工具的使用方法)
- android利用Http协议获取网页文本内容的方法
- Android获取网页数据的方法总结
- (三十一)工具方法:获得应用程序包名/安装apk/如何获得当前栈顶的Activity/android如何实现点击一个按钮进入指定网页
- Python获取网页指定内容(BeautifulSoup工具的使用方法)
- Android获取网页数据的方法总结
- android初级之Android获取网页数据的方法总结
- android中webview携带cookie以及webview所加载网页中js调用java方法问题
- Android获取网页数据的方法总结
- JS获取网页中HTML元素的几种方法分析