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/" + codeprivate 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中获取网页cookie的工具方法相关推荐

  1. android获取颜色资源,Android中获取颜色的几种方法

    Android中获取颜色的几种方法: 通过android封装好的Color类中的常量 public static final int BLACK = 0xFF000000; public static ...

  2. Android中获取网络图片的三种方法

    android中获取网络图片是一件耗时的操作,如果直接获取有可能会出现应用程序无响应(ANR:Application Not Responding)对话框的情况.对于这种情况,一般的方法就是耗时操作用 ...

  3. Android 中获取网络下载速率的方法

    文章目录 相关方法如下: // 获取应用程序的 uid public static int getAppUid() {int uid = -1;// KmApplication是我的自定义Applic ...

  4. Android中获取屏幕物理尺寸的方法

    第一种方法 //获取屏幕宽度 int screenWidth = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)). ...

  5. Android中获取流量相关数据的方法

    获取流量的相关数据主要使用的是TrafficStats工具类.这里列举一下该类的主要方法. getTotalRxBytes:获取接收流量的总字节数. getTotalTxBytes:获取发送流量的总字 ...

  6. 【音视频安卓开发 (五)】Android中获取音视频原始数据的方法

    一般取得原始数据的方法使用的camera setPreviewCallback

  7. android apk 的信息,Android中获取apk基本信息

    一 PackageManager可以获得的所有包节点信息: 1,所有节点的基类:PackageItemInfo: 2,PackageInfo:package的全面信息,与AndroidManifest ...

  8. Android WebView获取网页中JavaScript弹框内容

    Android WebView获取网页中JavaScript弹框内容 网页中弹窗的js代码为 <script type="text/javascript" language= ...

  9. android开发获取imei码,Android中获取IMEI码的方法

    我们在开发项目的时候,通常要获取手机的IMEI码,这是开发的必备需求,接下来,爱站技术频道小编就告诉大家Android中获取IMEI码的方法,希望本文的介绍能提高大家的水平. 核心代码:Imei = ...

最新文章

  1. celery源码分析-Task的初始化与发送任务
  2. 基于Attention机制的轻量级网络架构以及代码实现
  3. Verilog 中 wire 和 reg 数据类型区别
  4. 第三周项目四-穷举法解决组合问题(1)
  5. 实战tcpdump看RST
  6. 成功解决This module was deprecated in version 0.18 in favor of the model_selection module into which all
  7. 离散制造业的数据采集之路
  8. 如何选择主机操作系统?
  9. asp.net中实现文件批量上传
  10. js导出excel单元格内换行符代码_前端和excel的那些事
  11. C语言源代码展示:常用转换函数实现原理
  12. 基于SpringBoot 2.3的WebService指南(包含案例)
  13. 想要在Mac 上运行 Windows 程序 不需要虚拟机也可以
  14. 《统计学基本概念和方法》读书笔记+读后感(1)
  15. jQuery调用WebService ( 同源调用)
  16. java 中的通讯之HTTP协议
  17. Spring bean销毁的过程
  18. CAD全称AutoCAD (全系列中文版软件+注册机下载) 2004-2020 安装视频教程
  19. Back键和Home键的屏蔽
  20. linux内核DCB子系统

热门文章

  1. jQuery图片滑块动画
  2. buuctf逆向simple rev
  3. hp510台式计算机,台式PC的呐喊 HP Pavilion 510主机评测
  4. Web服务器,Web容器和应用服务器的区别
  5. 毛哥的快乐生活(连载至第30篇)
  6. keras之父《python深度学习》笔记 第八章
  7. 实现微信小程序编译和运行环境系列 (进阶篇)
  8. MOS管三个工作状态
  9. 给我一个FPGA,可以撬起所有显示的接口和面板
  10. 小贷贷还款账务表设计