sina获取实时股票数据

sina获取实时股票数据packagecom cmn importjava io BufferedRead importjava io IOException importjava io InputStream importjava io InputStreamR importjava io OutputStream importjava io Unsupport

package com.cmn; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLConnection; import java.util.regex.Pattern; import net.sf.json.JSONObject; import org.apache.commons.lang3.StringEscapeUtils; import org.apache.commons.lang3.StringUtils; public class StockUtil { public static final int CONNECTTIMEOUT = 5000; public static final int READRESPONSETIMEOUT = 5000; public static final String UTF8 = "UTF-8"; public static final String GBK = "GBK"; public static boolean isNotBlank(Object b) { if (b == null) { return false; } String a = b.toString(); if (a.equals("")) { return false; } else { return true; } } public static boolean isBlank(Object b) { if (b == null) { return true; } String a = b.toString(); if (a.equals("")) { return true; } else { return false; } } public static boolean isTrue(Object b) { if (b == null) { return false; } String a = b.toString(); if (a.equals("1") || a.equals("true")) { return true; } return false; } // regular pattern public static boolean regex(String str, String regex) { if (str == null) { return false; } Pattern pattern = Pattern.compile(regex); return pattern.matcher(str).matches(); } public static String postUrl(String queryUrl, Map data) { Iterator e = data.keySet().iterator(); StringBuffer a = new StringBuffer(); while (e.hasNext()) { String key = (String) e.next(); a.append(key).append("=").append(data.get(key)).append("&"); } InputStream ips = getInputPostStream(queryUrl, a.toString()); if (ips == null) { System.err.println("connect error, please check your connection!"); return null; } String response = getResponse(ips, "utf-8"); if (response == null) { System.err.println("connect error, please check your connection."); return null; } else { // System.out.println(response); } return response; } / * 从请求的URL中获取返回的数据流 * * @param requestUrl * @return InputStream */ public static InputStream getInputStream(String requestUrl) { URL url = null; HttpURLConnection conn = null; InputStream in = null; try { url = new URL(requestUrl); conn = (HttpURLConnection) url.openConnection(); // System.setProperty("sun.net.client.defaultConnectTimeout", // 超时毫秒数字符串); // System.setProperty("sun.net.client.defaultReadTimeout", // 超时毫秒数字符串); // setConnectTimeout:设置连接主机超时(单位:毫秒) conn.setConnectTimeout(5000); // setReadTimeout:设置从主机读取数据超时(单位:毫秒) conn.setReadTimeout(5000); // 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在 http正文内,因此需要设为true, // 默认情况下是false; conn.setDoOutput(true); // 设置是否从httpUrlConnection读入,默认情况下是true; conn.setDoInput(true); conn.setUseCaches(true); conn.setRequestMethod("GET"); conn.connect(); // 实际发送请求的代码段就在这里 in = conn.getInputStream(); } catch (IOException e) { e.printStackTrace(); return null; } finally { conn = null; url = null; } return in; } / * @description 从请求的URL中获取返回的数据 * @param requestUrl * @param postParam * @return */ public static InputStream getInputPostStream(String requestUrl, String postParam) { URL url = null; HttpURLConnection conn = null; InputStream in = null; try { url = new URL(requestUrl); URLConnection urlConn = url.openConnection(); conn = (HttpURLConnection) urlConn; // setConnectTimeout:设置连接主机超时(单位:毫秒) conn.setConnectTimeout(30000); // setReadTimeout:设置从主机读取数据超时(单位:毫秒) conn.setReadTimeout(30000); // 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在 http正文内,因此需要设为true, // 默认情况下是false; conn.setDoOutput(true); // 设置是否从httpUrlConnection读入,默认情况下是true; conn.getDoInput(); // Post 请求不能使用缓存 conn.setUseCaches(false); conn.setRequestMethod("POST"); // 此处getOutputStream会隐含的进行connect(即:如同调用上面的connect()方法, // 所以在开发中不调用上述的connect()也可以)。 OutputStream outStrm = conn.getOutputStream(); // 向对象输出流写出数据,这些数据将存到内存缓冲区中 outStrm.write(postParam.getBytes()); // 刷新对象输出流,将任何字节都写入潜在的流中(些处为ObjectOutputStream) outStrm.flush(); // 关闭流对象。此时,不能再向对象输出流写入任何数据,先前写入的数据存在于内存缓冲区中, // 在调用下边的getInputStream()函数时才把准备好的http请求正式发送到服务器 outStrm.close(); // 实际发送请求的代码段就在这里 in = conn.getInputStream(); } catch (IOException e) { e.printStackTrace(); return null; } finally { conn = null; url = null; } return in; } / * @description 将流数据转换成字符串 * @param ips * @param codeFormat * @return */ public static String getResponse(InputStream ips, String codeFormat) { StringBuffer sb = new StringBuffer(); InputStreamReader isreader = null; try { isreader = new InputStreamReader(ips, codeFormat); } catch (UnsupportedEncodingException e) { e.printStackTrace(); return null; } BufferedReader bufferedReader = new BufferedReader(isreader); String line = null; try { while ((line = bufferedReader.readLine()) != null) { sb.append(line); } bufferedReader.close(); isreader.close(); ips.close(); ips = null; } catch (IOException e) { e.printStackTrace(); return null; } return sb.toString(); } / * 根据url调用web接口 * * @param url * 访问地址, 必备参数 * @param method * 请求方式post还是get, 默认get * @param params * 参数列表 post必备, 比如:"name=张三&age=18" * @param sessionInfo * 可以保持session, 默认不保持 * @param encoding * 编码格式, 默认UTF_8 * @param isLine * 得到的源码是否换行, 默认false * @return String */ public static String requestUrl(String url, String method, String params, String sessionInfo, String encoding, boolean isLine) { try { encoding = (isBlank(encoding) ? UTF8 : encoding); method = (isBlank(method) ? "GET" : method.toUpperCase()); String mathStr = "mathRandom=" + Math.random(); if (method.equals("GET")) { url += (url.indexOf("?") != -1 ? "&" : "?") + mathStr; if (!isBlank(params)) { url += "&" + params; } System.out.println("url="+url); } HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection(); if (!isBlank(sessionInfo)) { connection.setRequestProperty("Cookie", sessionInfo); } connection.setRequestMethod(method); connection.setConnectTimeout(15000); connection.setReadTimeout(15000); if (method.equals("POST")) { connection.setDoOutput(true); params = (isBlank(params) ? mathStr : params + "&" + mathStr); OutputStream output = connection.getOutputStream(); output.write(params.getBytes(encoding)); output.flush(); output.close(); } // String result = FileUtil.readFile(connection.getInputStream(), // encoding, 1, isLine); String result = getResponse(connection.getInputStream(), encoding); connection.disconnect(); return result; } catch (Exception e) { System.out.println("根据url调用web接口" + e); e.printStackTrace(); } return null; } public static void main(String[] args) { Date date = new Date(); System.out.println(requestUrl("http://hq.sinajs.cn/list=sh ", "GET", null, null, "GBK", false)); System.out.println("本次调用web接口耗时" + (new Date().getTime() - date.getTime()) + "毫秒"); } } 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/224859.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 上午10:58
下一篇 2026年3月17日 上午10:59


相关推荐

  • 图解圆周卷积

    图解圆周卷积1 圆周卷积 circularconv 圆周卷积 也叫循环卷积 两个长度为 N 的有限场序列 x n x left n right 和 h n h left n right 的循环卷积定义为 y n N 1m 0x m h n m N RN n xn yny left n right sum m 0 N 1 x left

    2026年3月17日
    1
  • StretchDIBits 的使用

    StretchDIBits 的使用StretchDIBits 该函数将DIB中矩形区域内像素使用的颜色数据拷贝到指定的目标矩形中。如果目标矩形比源矩形大小要大,那么函数对颜色数据的行和列进行拉伸,以与目标矩形匹配。如果目标矩形大小要比源矩形小,那么该函数通过使用指定的光栅操作对行列进行压缩。参数:hdc:指向目标设备环境的句柄。XDest:指定目标矩形左上角位置的X轴坐标,按

    2022年6月23日
    32
  • gateway网关的作用_gateway网关集群

    gateway网关的作用_gateway网关集群为啥要有网关大型系统在设计之初就会拆分为多个微服务,客户不可能都按每个服务的服务器地址进行访问,因为每个服务对应一个指定的Url,人咋记那么多的地址,这样我们是不是需要一个统一的入口公开给客户,去解决这种调用问题,同时,AJAX虽说可以进行异步请求实现局部刷新,但是不能解决跨域对吧,之前我们怎么进行跨域处理的,用的是在controller层添加@CrossOrign注解,解决跨域问题。单体项目还好说,那么在微服务项目中可能又成千上百的服务,那我都要一个个加吗?而且有的服务还可能存在着没有controll

    2022年10月11日
    8
  • Linux驱动基础开发

    Linux驱动基础开发来源:http://www.linuxidc.com/Linux/2011-10/44721.htmLinux设备驱动概述目前,Linux软件工程师大致可分为两个层次:(1)Linux应用软件

    2022年7月1日
    23
  • Linux超级守护进程——xinetd

    Linux超级守护进程——xinetd

    2021年6月14日
    497
  • CRLF是什么东西?

    CRLF是什么东西?对于 CRLF 这个词来说 相信搞开发的应该都不会陌生 意思是

    2026年3月19日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号