android中获取网页cookie的工具方法
来源:互联网 发布:php 防止ddos攻击 编辑:程序博客网 时间:2024/06/02 06:26
1.应用场景
我自己的应用场景是,做一个股票分时图控件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(); } } } }
阅读全文
0 0
- android中获取网页cookie的工具方法
- python中利用Cookielib获取网页的登录的cookie
- 获取打开网页的cookie
- Android获取网页数据的方法总结
- Android获取网页数据的方法总结
- Android获取网页数据的方法总结
- android获取网页数据的方法
- javascript 中cookie的存储,获取cookie,删除cookie的方法。
- javascript 中cookie的存储,获取cookie,删除cookie的方法
- javascript 中cookie的存储,获取cookie,删除cookie的方法
- javascript 中cookie的存储,获取cookie,删除cookie的方法。
- javascript 中cookie的存储,获取cookie,删除cookie的方法。
- android中读写cookie的方法
- Android WebView中获取网页的title
- javascript中cookie的存储,获取,删除等方法
- Android中Http加载如何得到Cookie和 WebView 加载网页如何得到的Cookie
- AFHTTPSessionManager获取cookie的方法
- webview获取网页cookie
- IOS 拍照,系统相册 拿照片地理位置,还有修改时间最新时间
- spark中遇到的数据倾斜问题
- MySQL数学函数
- Generative Adversarial Networks 生成对抗网络的简单理解
- 数据结构学习---线性表顺序存储结构的基本操作
- android中获取网页cookie的工具方法
- iOS显示启动页时隐藏状态栏
- php-使用redis字符串缓存
- consul-HTTP API
- 数据库 --关联查询(多表查询)
- easyui 基础(二)
- PLSQL操作Oracle创建用户和表
- mysql5.7官网直译SQL语句优化--select语句优化
- HTML中让表单input等文本框为只读不可编辑的方法