在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)服务接口时不设置上述参数也能够正常访问。
在C#中通过使用Newtonsoft.Json库来解析天地图地理编码(GeoCoder)服务接口返回的Json格式的数据,以及HttpWebRequest 设置不完全时服务器返回“远程服务器返回错误: (403) 已禁止”解决方法的更多相关文章
- C#爬网页时“远程服务器返回错误: (403) 已禁止”解决方法
HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(uri); //这个一定要加上,在某些网站没有会发生"远程服务器返回错误: ...
- 在C#中通过使用Newtonsoft.Json库来解析百度地图地理编码(GeoCoder)服务接口返回的Json格式的数据
百度地图地理编码(GeoCoder)服务接口返回的Json格式的数据,如下所示: http://api.map.baidu.com/geocoding/v3/?address=**省**市**区**路 ...
- Nginx常见错误与问题之解决方法技术指南
Nginx常见错误与问题之解决方法技术指南. 安装环境: 系统环境:redhat enterprise 6.5 64bit 1.Nginx 常见启动错误 有的时候初次安装nginx的时候会报这样的 ...
- 004_Nginx 499错误的原因及解决方法
一. 今天进行系统维护,发现了大量的499错误, 499错误 ngx_string(ngx_http_error_495_page), /* 495, https certificate error ...
- 出现 java.lang.OutOfMemoryError: PermGen space 错误的原因及解决方法
一.原因及解决方法[1] 1.原因:堆内存的永久保存去区内存分配不足(缺省默认为64M),导致内存溢出错误. 2.解决方法:重新分配内存大小,-Xms1024M -Xmx2048M -XX:PermS ...
- 电脑出现kernelbase.dll错误的两种解决方法
KernelBase.dll是Windows操作系统的重要文件,它为各种应用程序提供服务.如果电脑提示kernelbase.dll错误,这该怎么处理?大家可以用电脑自带的防火墙或者是第三方软件来进行故 ...
- Nginx 499错误的原因及解决方法
今天进行系统维护,发现了大量的499错误, 499错误 ngx_string(ngx_http_error_495_page), /* 495, https certificate error */n ...
- SQL Server 2008 用户SA登录失败(错误18456)之图文解决方法
SQL2008无法连接到.\SQLEXPRESS,用户'sa'登录失败(错误18456)图文解决方法 出现问题 : 标题: 连接到服务器 ------------------------------ ...
- vi错误terminal too wide解决方法
vi错误terminal too wide解决方法 http://blog.sina.com.cn/s/blog_3f68daa00100vcsh.html
- qt 旧项目编译运行提示 “启动程序失败,路径或者权限错误?” 原因及解决方法
qt 旧项目编译运行提示 "启动程序失败,路径或者权限错误?" 原因及解决方法 原因 Qt Creator在打开项目文件的同时会生成.pro.user文件,.pro.user文件叫 ...
随机推荐
- KubeSphere 对 Apache Log4j 2 远程代码执行最新漏洞的修复方案
Apache Log4j 2 是一款开源的日志记录工具,被广泛应用于各类框架中.近期,Apache Log4j 2 被爆出存在漏洞,漏洞现已公开,本文为 KubeSphere 用户提供建议的修复方案. ...
- 工作中的技术总结_JAVA_AA-00001 关于Session的使用 _20210825
AA-00001 关于Session的使用 _20210825 Session Java 中的Session:javax.servlet.http.HttpSession; 应用: 在我自己的项目中 ...
- springboot:调用接口返回的数据乱码解决
从git拉下来项目后,运行服务,启动正常,但是使用swagger和postman调用服务接口出现乱码问题 每一个接口返回的数据是乱码,但是控制台打印的日志都是正常的,后续发现数据的返回类型不是常见的a ...
- 一文搞懂 ARM 64 系列: PACISB
1 PAC AMR64提供了PAC(Pointer Authentication Code)机制. 所谓PAC,简单来说就是使用存储在芯片硬件上的「密钥」,一个「上下文」,与「指针地址」进行加密计算, ...
- Docker for the Virtualization Admin
Docker is one of the most successful open source projects in recent history, and organizations of al ...
- 2023NOIP A层联测9 T3 天竺葵
2023NOIP A层联测9 T3 天竺葵 题面及数据范围 Ps:连接为accoderOJ. 看题大概是一个最长上升子序列的带权版本,于是想到 dp. 设 \(dp[i][j]\) 为到第 \(i\) ...
- 用 300 行代码手写提炼 Spring 核心原理 [1]
系列文章 用 300 行代码手写提炼 Spring 核心原理 [1] 用 300 行代码手写提炼 Spring 核心原理 [2] 用 300 行代码手写提炼 Spring 核心原理 [3] 手写一个 ...
- docker部署java项目
1.首先你需要提前准备好jar包或者war包,并想办法放入Linux环境(或虚拟机)中: 2.java项目的部署需要用到Tomcat或者Jetty,docker可以直接拉取他俩的镜像,这里以Tomca ...
- 超详细 HarmonyOS 开发教程之开发环境搭建指南
HarmonyOS开发环境搭建指南:DevEco Studio安装教程 一.系统要求 操作系统:Windows 10 64位或更高版本 RAM:至少8GB,推荐16GB 硬盘空间:至少10GB可用空间 ...
- javascript的一些API接口的使用
1.blob http URL 在编辑器中,有的情况下插入图片,会讲图片转成 blob:http://localhost/*** 的这种形式.这种形式的URL实际数据是存放在浏览器的内存中. 这种情况 ...