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;

posted @ 2023-05-02 11:23  jetz  阅读(1010)  评论(0编辑  收藏  举报