C#访问新浪股票接口失效的处理
新浪接口很好用,但后来一直就不能用了,比如
http://hq.sinajs.cn?list=sh601003
返回Forbidden
找了一下,发现腾讯的股票接口和新浪的很接近,能用,就直接换腾讯了。
今天因为港股数据的问题,还是想试试新浪接口,找了一下文章,发现问题是新浪需要一个header
新浪股票接口失效解决方法,2022年访问接口出现 “Kinsoku jikou desu” 日语禁止访问
解决办法是在请求头部添加Referer字段
2022 新浪股票接口更新需要加Referer才能获取数据
Referer:http://finance.sina.com.cn
于是尝试,修改访问前修改HttpWebRequest,结果不行,研究一圈,发现需要用反射
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
//request.Headers.Add("referer", "https://finance.sina.com.cn/");
//request.Headers["referer"] = "https://finance.sina.com.cn/";
MethodInfo priMethod = request.Headers.GetType().GetMethod("AddWithoutValidate", BindingFlags.Instance | BindingFlags.NonPublic);
priMethod.Invoke(request.Headers, new string[] { "referer", "https://finance.sina.com.cn/" });
string content = "";
try
{
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK) //防止无响应
{
StreamReader reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.GetEncoding("GB2312"));
content = reader.ReadToEnd();
reader.Close();
}
}
相关引用
using System;
using System.Collections.Generic;
using System.Text;
using System.Timers;
using System.Text.RegularExpressions;
using System.Data;
using System.Net;
using System.ComponentModel;
using System.Web;
using System.Web.UI;
using System.IO;
using System.Reflection;