关于新浪股票实时接口最近更新的解决办法

大家常用的新浪实时股票数据接口,即http://hq.sinajs.cn/list=code,最近发生了更新。直接用网页访问返回提示“Kinsoku jikou desu!”(日本语禁止访问,真有文化!)

经本人调查后发现,必须使用https访问,并且在请求头部添加Referer字段

因为之前使用@持有封基 老师的Excel模板,相关vbs的代码需要更新,添加请求头。但原来的XmlHttp对象无法伪造部分HTTP头信息(包括Referer),所以必须改为WinHttp对象才能访问

附上修改后的宏代码:

With CreateObject("WinHttp.WinHttpRequest.5.1")
.Open "GET", URL, False
.setRequestHeader "Referer", "https://finance.sina.com.cn"
.Send
sTemp = .responseText
End With
发表时间 2022-01-25 17:28     最后修改时间 2022-01-25 17:29

赞同来自: 余小小 xiaowa c00517 天地玄黄宇宙洪 reach2000更多 »

1

老好a人

赞同来自: 余小小

现在新浪股票实时数据接口,IP地址改了。导致失败。我改成最新IP地址,正常运行。感兴趣的改改20240201
2024-02-01 18:46 来自广东 引用
0

cococa

赞同来自:

@wangyun1127
搞明白了,和IP也有关系,同样的代码,有的IP可以,有的不可以
感谢,被ban的话,重启一下光猫
2022-09-22 10:13 来自北京 引用
0

wangyun1127

赞同来自:

搞明白了,和IP也有关系,同样的代码,有的IP可以,有的不可以
2022-09-08 14:33 来自广东 引用
0

pondfish

赞同来自:

@wangyun1127
现在加个Referer好像也不行了,大家的数据都还好吗?
有几个月没用了,不知道
2022-09-08 13:55 来自江西 引用
1

pondfish

赞同来自: heihei123123

@frank344
我用的Python,加了Referer以后再没出过问题。你们可能有短时间请求次数过多的问题。我看很多人分享的VB代码都是一个一个查询的,50个股票就要查询50次。实际上新浪股票API是可以一次查询50个股票的,比如:http://hq.sinajs.cn/list=sh510300,sz162411就可以返回两个结果。通过编程处理一下就好了。
750个一次没问题
2022-09-08 13:55 来自江西 引用
0

wangyun1127

赞同来自:

现在加个Referer好像也不行了,大家的数据都还好吗?
2022-09-08 12:57 来自广东 引用
0

kesen12

赞同来自:

@kesen12
大神大神。
我修改了if语句中的len>5,希望可以查询期货数据,然后真的可以查询了。
输入CF2209,可以显示名称、日期和实时价格(就是会有报错“下标越界”,但不影响)
可是输入IC2209、IF2209、IM2209都没有对应的数据。
翻看新浪期货网站的数据,网址就是这些代码IF2209没有错啊。
望大神不吝赐教!就是3个股指期货在新浪接口中的正确的代码是什么?谢谢
============...
自己解决了,根据python代码反推了VBA中需要修改的部分,以下代码仅仅适用于股指期货:

Sub 获取数据()
Call GetStockPrice(Sheet1)
End Sub

Sub GetStockPrice(ByVal sheet As Worksheet)
Dim rowCount As Integer
Dim URL As String
Dim sTemp As String

For nColumn = 66 To 90
code = sheet.Range(Chr(nColumn) & "1").Text
If Len(code) = 6 Then
URL = "https://hq.sinajs.cn/list=nf_" & code
With CreateObject("WinHttp.WinHttpRequest.5.1")
.Open "GET", URL, False
.setRequestHeader "Referer", "https://finance.sina.com.cn"
.Send
sTemp = .responseText
End With
ss = InStr(sTemp, ",")
If ss > 1 Then
startindex = InStr(1, sTemp, """")
endindex = InStrRev(sTemp, """")
substr = Mid(sTemp, startindex + 1, endindex - 1)
valuearray = Split(substr, ",")
sheet.Range(Chr(nColumn) & "5").Value = valuearray(3) '当前价
End If
End If
Next nColumn
End Sub
2022-08-07 16:08 来自河南 引用
0

kesen12

赞同来自:

大神大神。
我修改了if语句中的len>5,希望可以查询期货数据,然后真的可以查询了。
输入CF2209,可以显示名称、日期和实时价格(就是会有报错“下标越界”,但不影响)
可是输入IC2209、IF2209、IM2209都没有对应的数据。
翻看新浪期货网站的数据,网址就是这些代码IF2209没有错啊。
望大神不吝赐教!就是3个股指期货在新浪接口中的正确的代码是什么?谢谢

==============
刚刚另外找了一个python的代码看看了数据的类型(编程白痴)
似乎不是代码的问题,是数据字段的顺序问题
2022-08-07 15:42修改 来自河南 引用
1

zoetina52

赞同来自: cococa

403了 我30秒才访问一次 一共就爬一个数据 日哦
2022-07-18 10:39 来自江苏 引用
0

虚心求教

赞同来自:

今天应该OK了,可以用了。
2022-07-18 10:26 来自新加坡 引用
2

cococa

赞同来自: zoetina52 iceomj

今天一早我又403了,有一样被封的兄弟吗?
2022-07-15 10:06 来自北京 引用
0

kalamy

赞同来自:

@kalamy
楼主知道怎么取纳斯达克期货的数据吗,以前好像是https: //hq.sinajs.cn/list=CME_NQ。现在不行了,试了一下午了..
hf_NQ搞定了
2022-05-19 08:29 引用
0

ptly

赞同来自:

好奇的问问,手机js怎么改http请求。。。
2022-05-18 20:45 引用
0

kalamy

赞同来自:

楼主知道怎么取纳斯达克期货的数据吗,以前好像是https: //hq.sinajs.cn/list=CME_NQ。现在不行了,试了一下午了..
2022-05-18 17:21 引用
0

apony

赞同来自:

@talentzhuojun
大神们我用C,的curl整了两个月了没解决,求教。
我得到的数据是:
var hq_sr_SZ000001="";
报错的信息有一句:
* schannel: failed to receive handshake,need more data
我的设置代码如下:
struct curl_slist *chunk = NULL;
chunk = curl_slist...
首先要确认你的curl库支持https吗?访问其他的https地址正常吗?
新浪的访问第一次好像会redirect,你们这个库支持吗?
抓下包吧,网络交互走到什么地方了?有问题不就是这样一步步定位的嘛
2022-03-13 07:52 引用
0

frank344

赞同来自:

@talentzhuojun
大神们我用C,的curl整了两个月了没解决,求教。
我得到的数据是:
var hq_sr_SZ000001="";
报错的信息有一句:
* schannel: failed to receive handshake,need more data
我的设置代码如下:
struct curl_slist *chunk = NULL;
chunk = curl_slist...
headers = { 'Referer':"http://finance.sina.com.cn"}
request=urllib.request.Request(url,None,headers)
tempHTML = urllib.request.urlopen(request, timeout=40)
tempContent = tempHTML.read()
tempStr = tempContent.decode("gbk");
2022-03-06 16:14 引用
0

ETF小迷弟

赞同来自:

@apony
我把之前下载的样例文件简单修改了下,本机WIN11 Office2019测试正常,有需要的可以自取
数据获取.xlsm
链接: https://pan.baidu.com/s/1AEkQ1SOvQE0cLt3eG97kBA?pwd=z38s
提取码: z38s


麻烦您给看看,我怎么就不能运行。

谢谢!
2022-03-06 15:42 引用
0

思行者

赞同来自:

感觉被没收了作案工具,哈哈哈哈哈*
2022-03-06 12:21 引用
0

talentzhuojun

赞同来自:

大神们我用C,的curl整了两个月了没解决,求教。
我得到的数据是:

var hq_sr_SZ000001="";

报错的信息有一句:
* schannel: failed to receive handshake,need more data

我的设置代码如下:
struct curl_slist *chunk = NULL;
chunk = curl_slist_append(chunk, "Accept:");
chunk = curl_slist_append(chunk, "Another: yes");
chunk = curl_slist_append(chunk, "https://finance.sina.com.cn";);
curl_easy_setopt(curl, CURLOPT_REFERER, "https://finance.sina.com.cn";);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, chunk);
curl_easy_setopt(curl, CURLOPT_URL, "https://hq.sinajs.cn/list=SZ000001";);
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);

求指条明路。或能给我完整的python代码也行。
2022-03-02 21:47 引用
0

talentzhuojun

赞同来自:

@eugeneshi
这种算是最简单的,随便加个token估计很多人就搞不定了
大神我用C,的curl整了两个月了没解决,求教。
我得到的数据是:

var hq_sr_SZ000001="";

报错的信息有一句:
* schannel: failed to receive handshake,need more data

我的设置代码如下:
struct curl_slist *chunk = NULL;
chunk = curl_slist_append(chunk, "Accept:");
chunk = curl_slist_append(chunk, "Another: yes");
chunk = curl_slist_append(chunk, "https://finance.sina.com.cn";);
curl_easy_setopt(curl, CURLOPT_REFERER, "https://finance.sina.com.cn";);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, chunk);
curl_easy_setopt(curl, CURLOPT_URL, "https://hq.sinajs.cn/list=SZ000001";);
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);

求指条明路。
2022-03-02 21:44 引用
0

rateltalk

赞同来自:

完美复活
2022-02-15 13:43 引用
0

frank344

赞同来自:

@JSLULULU
求教python怎么加Referer
headers = { 'Referer':"http://finance.sina.com.cn"}
request=urllib.request.Request(url,None,headers)
tempHTML = urllib.request.urlopen(request, timeout=40)
tempContent = tempHTML.read()
tempStr = tempContent.decode("gbk");
2022-02-10 18:03 引用
0

sztz

赞同来自:

收藏
2022-02-10 08:33 引用
1

LULULUJS

赞同来自: 冰糖葫芦娃8

@JSLULULU
求教python怎么加Referer
可以了,本来用的request.url.open
改用requests后可以了

headers={'Referer' :'https://finance.sina.com.cn'}
url='https://hq.sinajs.cn/list=sh600000'
file=requests.get(url=url,headers=headers)
print(file.text)
2022-02-09 17:42 引用
0

LULULUJS

赞同来自:

@frank344
我用的Python,加了Referer以后再没出过问题。
求教python怎么加Referer
2022-02-09 16:45 引用
1

apony

赞同来自: tdcq1988

@coobydean
麻烦提供excel文件
我把之前下载的样例文件简单修改了下,本机WIN11 Office2019测试正常,有需要的可以自取

数据获取.xlsm
链接: https://pan.baidu.com/s/1AEkQ1SOvQE0cLt3eG97kBA?pwd=z38s
提取码: z38s
2022-01-27 21:41 引用
0

盘角曲四

赞同来自:

@量化自由
看了挺多人用新浪的源的。

之前自己用python写的监控转债正股涨跌停(或者接近涨跌停)的程序,发送到微信的。
源用的券商,数据比新浪的快不少的。一次请求把300多只股票数据获取了。

后面嫌弃python慢,毕竟为的就是快速拉升前下单,改为了golang,又快了不少。
这位高手,请问哪个券商的源可以用python 获取实时行情,是免费的吗?我也用类似的机制发送到微信,不过之前用新浪的接口,现在用腾讯的
2022-01-27 10:10 引用
1

量化自由

赞同来自: star

看了挺多人用新浪的源的。

之前自己用python写的监控转债正股涨跌停(或者接近涨跌停)的程序,发送到微信的。
源用的券商,数据比新浪的快不少的。一次请求把300多只股票数据获取了。

后面嫌弃python慢,毕竟为的就是快速拉升前下单,改为了golang,又快了不少。
2022-01-27 09:43 引用
0

localvar

赞同来自:

@eugeneshi
这种算是最简单的,随便加个token估计很多人就搞不定了
简单的估计还会再加个 UserAgent,真到了用 token 那一步,大多数人搞不定后,少数人的机会能大些。
2022-01-27 08:22 引用
0

nhj2021

赞同来自:

先收藏
2022-01-27 07:39 引用
0

eugeneshi - 投资能力还不错的python程序员

赞同来自:

这种算是最简单的,随便加个token估计很多人就搞不定了
2022-01-27 06:50 引用
0

frank344

赞同来自:

我用的Python,加了Referer以后再没出过问题。你们可能有短时间请求次数过多的问题。我看很多人分享的VB代码都是一个一个查询的,50个股票就要查询50次。实际上新浪股票API是可以一次查询50个股票的,比如:http://hq.sinajs.cn/list=sh510300,sz162411就可以返回两个结果。通过编程处理一下就好了。
2022-01-27 04:17 引用
0

急死菜鸟

赞同来自:

有腾讯的接口吗,新浪的太不稳定了
2022-01-26 23:56 引用
0

gw210

赞同来自:

可以考虑换腾讯接口
2022-01-26 23:29 引用
1

babebu

赞同来自: 几度沉

现在又不行了,完全失效了
2022-01-26 22:58 引用
1

jiangyuyi

赞同来自: Corey丶

写这个返回错误的大概是凉宫春日迷吧…
2022-01-26 22:52 引用
0

coobydean

赞同来自:

麻烦提供excel文件
2022-01-26 21:48 引用
0

apony

赞同来自:

@lovezjc
你改为现在还正常吗,我试了2天现在还不行
不正常我发帖干嘛?
记得使用https访问,即https://hq.sinajs.cn/list=code,再加上Referer字段
2022-01-26 20:49 引用
0

lovezjc

赞同来自:

你改为现在还正常吗,我试了2天现在还不行
2022-01-26 19:16 引用

要回复问题请先登录注册

发起人

问题状态

  • 最新活动: 2024-02-01 18:46
  • 浏览: 47961
  • 关注: 56