C#中用HTTP协议通过API获取返回的Json并解析入库_c#接收json并写入数据库_熬夜数学家的博客-CSDN博客

目标:通过C#对API的内容(Json)进行提取,如下面这样的信息

        api:https://api.wzjbbus.com/intf/app/station/30/1

 

一、首先需要添加一个类,用于获取目标的json,用的HttpWebRequest和HttpWebResponse

如下

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Net;using System.IO;using System.Net.Security;using System.Security.Authentication;using System.Security.Cryptography.X509Certificates; namespace DataEnterStatService{    public class HttpUitls    {        public static bool Cheack(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)        {            return true;        }         /// <summary>        /// 通过HTTP协议获取网点的Jsion返回        /// </summary>        /// <param name="Url"></param>        /// <returns></returns>        public static string Get(string Url)        {             try            {                //安全协议(如果服务器使用了安全协议,客户端就要加上这个)                ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | (SecurityProtocolType)0x300 | (SecurityProtocolType)0xC00; //Tls12                ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(Cheack);                 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);                request.Proxy = null;                request.KeepAlive = false;                request.Method = "GET";                request.ContentType = "application/json; charset=UTF-8";                request.AutomaticDecompression = DecompressionMethods.GZip;                 //获取api的返回                HttpWebResponse response = (HttpWebResponse)request.GetResponse();                Stream myResponseStream = response.GetResponseStream();                StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.UTF8);                string retString = myStreamReader.ReadToEnd();                 //关闭非托管流和资源                myStreamReader.Close();                myResponseStream.Close();                if (response != null)                    response.Close();                if (request != null)                    request.Abort();                 return retString;            }            catch (Exception ex)            {                //记录日志 获取接口异常:ex                return "";            }                    }         public static string Post(string Url, string Data, string Referer)        {            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);            request.Method = "POST";            request.Referer = Referer;            byte[] bytes = Encoding.UTF8.GetBytes(Data);            request.ContentType = "application/x-www-form-urlencoded";            request.ContentLength = bytes.Length;            Stream myResponseStream = request.GetRequestStream();            myResponseStream.Write(bytes, 0, bytes.Length);             HttpWebResponse response = (HttpWebResponse)request.GetResponse();            StreamReader myStreamReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);            string retString = myStreamReader.ReadToEnd();             myStreamReader.Close();            myResponseStream.Close();             if (response != null)            {                response.Close();            }            if (request != null)            {                request.Abort();            }            return retString;        }     }}

二、返回的Json需要一个列表容器装载(结构体),这里推荐一个网站,可以把json转结构体

www.bejson.com

using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace DataEnterStatService{    public class StationListItem    {        public string ChangeDate { get; set; }        public List<DataItem> list { get; set; }    }    public class DataItem    {        /// <summary>        ///         /// </summary>        public string Id { get; set; }        /// <summary>        ///         /// </summary>        public string GprsId { get; set; }        /// <summary>        ///         /// </summary>        public string Direction { get; set; }        /// <summary>        ///         /// </summary>        public string OrderNo { get; set; }        /// <summary>        ///          /// </summary>        public string Name { get; set; }        /// <summary>        ///         /// </summary>        public string Lng { get; set; }        /// <summary>        ///         /// </summary>        public string Lat { get; set; }        /// <summary>        ///         /// </summary>        public string ByFisrtDist { get; set; }           } }

三,代码实现部分(函数方法)

        ps:这里需要用到json库Newtonsoft.Json 

 public void UpdateStationInfo()        {            try            {                DataTable dt = GetLine_StationInfo();                for (int i = 0; i < dt.Rows.Count; i++)                {                    string lineid = dt.Rows[i]["LINEID"].ToString();                    string direction = dt.Rows[i]["DIRECTIONTYPE"].ToString();                    string updateDay = dt.Rows[i]["UPDATE_DAY"].ToString();                     //1.URL拼接                       string url = @"https://api.wzjbbus.com/intf/app/station/" + lineid + @"/" + direction;                     //2.通过接口url,获取接口返回信息                    string getJson = HttpUitls.Get(url);                     //3.检查是否更新:1.为空的就是没有这线路,需要更新;2.日期一致,不需要更新                    if (updateDay != "" && getJson.Replace("-", "").Contains(updateDay.Substring(0, 8)))                        continue;                     //4.检查是否获取站点信息成功                    StationListItem StationList = JsonConvert.DeserializeObject<StationListItem>(getJson);                    if (StationList.list.Count == 0)                    {                        LogFiles.WriteLog("获取线路信息为空,请确认接口是否存在站点信息。线路号:" + lineid + " " + (direction == "0" ? "上行(0)" : "下行(1)") + " URL:" + url, "DayStat");                        continue;                    }                     //5.站点信息入库                    if(InsertLine_StationInfo(StationList))                        LogFiles.WriteLog("线路号:" + lineid + " " + (direction == "0" ? "上行(0)" : "下行(1)") + ",站点信息入库更新完成", "DayStat");                }            }            catch (Exception ex)            {                LogFiles.WriteLog("更新站点信息异常:" + ex.ToString(), "DayStat");            }        }

原网址: 访问
创建于: 2023-06-15 17:10:57
目录: default
标签: 无

请先后发表评论
  • 最新评论
  • 总共0条评论