zoukankan      html  css  js  c++  java
  • 在C#中通过使用Newtonsoft.Json库来解析天地图地理编码(GeoCoder)服务接口返回的Json格式的数据,以及HttpWebRequest 设置不完全时服务器返回“远程服务器返回错误: (403) 已禁止”解决方法

    天地图地理编码(GeoCoder)服务接口返回的Json格式的数据,如下所示:

    http://api.tianditu.gov.cn/geocoder?ds={"keyWord":"北京市"}&tk=您的tk密钥

    返回结果实例:

    {
    "msg":"ok",
    "location":
                    {
                        "level":"地名地址",
                        "lon":116.40100299989,
                        "lat":39.90311700025,
                        "keyWord":"北京市"
                    },
    "searchVersion":"6.0.0",
    "status":"0"
    }

    本文简要介绍如何在C#中通过使用Newtonsoft.Json库来解析Json格式的数据。

    1、创建主应用程序(控制台或Winform程序均可);

    2、引入Newtonsoft.Json.dll。

    3、在工程中创建如下的类,添加using Newtonsoft.Json;名称空间的引用:

    using System;
    using System.Collections.Generic;
    using System.Text;
    
    using Newtonsoft.Json;
    
    namespace WorldWind
    {
        public class LocationTDT
        {
            [JsonProperty("level")]
            public string Level { get; set; }
    
            [JsonProperty("lon")]
            public double Lon { get; set; }
    
            [JsonProperty("lat")]
            public double Lat { get; set; }
    
            [JsonProperty("keyWord")]
            public string KeyWord { get; set; }
        }
    
    
        class RecordResultTDT
        {
            [JsonProperty("msg")]
            public string Msg { get; set; }
    
            [JsonProperty("location")]
            public LocationTDT Location { get; set; }
    
            [JsonProperty("searchVersion")]
            public string SearchVersion { get; set; }
    
            [JsonProperty("status")]
            public int Status { get; set; }
        }
    }

    4、构建URL服务连接,发起Http请求,获取响应数据流中的内容,调用JsonConvert.DeserializeObject()方法将字符串反序列化为对象即可,调用的cs文件中需要添加using Newtonsoft.Json;名称空间的引用:

                stringm_CurrentSearchUri="http://api.tianditu.gov.cn/geocoder?ds={"keyWord":"北京市"}&tk=您的tk密钥";
                // 发送要求
                        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(m_CurrentSearchUri);
                        //下面的代码一定要加上,在天地图网站会发生"远程服务器返回错误: (403) 已禁止。"
                        request.Method = "GET";
                        request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
                        request.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3");
                        request.UserAgent = "Mozilla/5.0 (Windows NT 5.2; rv:12.0) Gecko/20100101 Firefox/12.0";
    
                        // 取得响应
                        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                        StreamReader sr = new StreamReader(response.GetResponseStream());
                        //得到一个json字符串
                        string joResultTemp = sr.ReadToEnd().ToString();
                        //将返回的json数据转为JSON对象
                        RecordResultTDT joResult = JsonConvert.DeserializeObject<RecordResultTDT>(joResultTemp);//返回天地图的Json对象

     5、另外,天地图的请求URL在浏览器直接输入时会返回正确的Json结果,但是在C#应用程序中当HttpWebRequest 的属性设置不完全时服务器返回“远程服务器返回错误: (403) 已禁止”

      解决方法:

      如上面的步骤4中提到的,HttpWebRequest 的Method、Accept、Headers、UserAgent等属性(UserAgent非常重要,否则服务器认为是非法请求)一定要设置完整。在访问百度地图的地理编码(GeoCoder)服务接口时不设置上述参数也能够正常访问。

     
  • 相关阅读:
    RabbitMQ管理
    vc6.0
    SystemTap
    undefined reference to `__imp_socket'
    采集小板校时
    点播播放不出来
    抓包注意事项
    下载rfc
    CLion快捷键
    rtsp vlc请求实例
  • 原文地址:https://www.cnblogs.com/rainbow70626/p/12353400.html
Copyright © 2011-2022 走看看