using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.IO; using Xfrog.Net; using System.Diagnostics; using System.Web;   //---------------------------------- // 全国车辆违章调用示例代码 - 聚合数据 // 在线接口文档:http://www.juhe.cn/docs/36 // 代码中JsonObject类下载地址:http://download.csdn.net/download/gcm3206021155665/7458439 //----------------------------------   namespace ConsoleAPI {     class Program     {         static void Main(string[] args)         {             string appkey = "*******************"; //配置您申请的appkey                             //1.获取支持城市参数接口             string url1 = "http://v.juhe.cn/wz/citys";               var parameters1 = new Dictionary();               parameters1.Add("province" , ""); //默认全部,省份简写,如:ZJ、JS             parameters1.Add("dtype" , ""); //返回数据格式:json或xml或jsonp,默认json             parameters1.Add("format" , ""); //格式选择1或2,默认1             parameters1.Add("callback" , ""); //返回格式选择jsonp时,必须传递             parameters1.Add("key", appkey);//你申请的key               string result1 = sendPost(url1, parameters1, "get");               JsonObject newObj1 = new JsonObject(result1);             String errorCode1 = newObj1["error_code"].Value;               if (errorCode1 == "0")             {                 Debug.WriteLine("成功");                 Debug.WriteLine(newObj1);             }             else             {                 //Debug.WriteLine("失败");                 Debug.WriteLine(newObj1["error_code"].Value+":"+newObj1["reason"].Value);             }                 //2.请求违章查询接口             string url2 = "http://v.juhe.cn/wz/query";               var parameters2 = new Dictionary();               parameters2.Add("dtype" , ""); //返回数据格式:json或xml或jsonp,默认json             parameters2.Add("callback" , ""); //返回格式选择jsonp时,必须传递             parameters2.Add("key", appkey);//你申请的key             parameters2.Add("city" , ""); //城市代码 *             parameters2.Add("hphm" , ""); //号牌号码 完整7位 ,需要utf8 urlencode*             parameters2.Add("hpzl" , ""); //号牌类型,默认02             parameters2.Add("engineno" , ""); //发动机号 (根据城市接口中的参数填写)             parameters2.Add("classno" , ""); //车架号 (根据城市接口中的参数填写)               string result2 = sendPost(url2, parameters2, "get");               JsonObject newObj2 = new JsonObject(result2);             String errorCode2 = newObj2["error_code"].Value;               if (errorCode2 == "0")             {                 Debug.WriteLine("成功");                 Debug.WriteLine(newObj2);             }             else             {                 //Debug.WriteLine("失败");                 Debug.WriteLine(newObj2["error_code"].Value+":"+newObj2["reason"].Value);             }                 //3.接口剩余请求次数查询             string url3 = "http://v.juhe.cn/wz/status";               var parameters3 = new Dictionary();               parameters3.Add("key", appkey);//你申请的key             parameters3.Add("dtype" , ""); //返回数据的格式,xml或json,默认json               string result3 = sendPost(url3, parameters3, "get");               JsonObject newObj3 = new JsonObject(result3);             String errorCode3 = newObj3["error_code"].Value;               if (errorCode3 == "0")             {                 Debug.WriteLine("成功");                 Debug.WriteLine(newObj3);             }             else             {                 //Debug.WriteLine("失败");                 Debug.WriteLine(newObj3["error_code"].Value+":"+newObj3["reason"].Value);             }             }           ///         /// Http (GET/POST)         ///         /// 请求URL         /// 请求参数         /// 请求方法         /// 响应内容         static string sendPost(string url, IDictionary parameters, string method)         {             if (method.ToLower() == "post")             {                 HttpWebRequest req = null;                 HttpWebResponse rsp = null;                 System.IO.Stream reqStream = null;                 try                 {                     req = (HttpWebRequest)WebRequest.Create(url);                     req.Method = method;                     req.KeepAlive = false;                     req.ProtocolVersion = HttpVersion.Version10;                     req.Timeout = 5000;                     req.ContentType = "application/x-www-form-urlencoded;charset=utf-8";                     byte[] postData = Encoding.UTF8.GetBytes(BuildQuery(parameters, "utf8"));                     reqStream = req.GetRequestStream();                     reqStream.Write(postData, 0, postData.Length);                     rsp = (HttpWebResponse)req.GetResponse();                     Encoding encoding = Encoding.GetEncoding(rsp.CharacterSet);                     return GetResponseAsString(rsp, encoding);                 }                 catch (Exception ex)                 {                     return ex.Message;                 }                 finally                 {                     if (reqStream != null) reqStream.Close();                     if (rsp != null) rsp.Close();                 }             }             else             {                 //创建请求                 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url + "?" + BuildQuery(parameters, "utf8"));                   //GET请求                 request.Method = "GET";                 request.ReadWriteTimeout = 5000;                 request.ContentType = "text/html;charset=UTF-8";                 HttpWebResponse response = (HttpWebResponse)request.GetResponse();                 Stream myResponseStream = response.GetResponseStream();                 StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));                   //返回内容                 string retString = myStreamReader.ReadToEnd();                 return retString;             }         }           ///         /// 组装普通文本请求参数。         ///         /// Key-Value形式请求参数字典         /// URL编码后的请求数据         static string BuildQuery(IDictionary parameters, string encode)         {             StringBuilder postData = new StringBuilder();             bool hasParam = false;             IEnumerator> dem = parameters.GetEnumerator();             while (dem.MoveNext())             {                 string name = dem.Current.Key;                 string value = dem.Current.Value;                 // 忽略参数名或参数值为空的参数                 if (!string.IsNullOrEmpty(name))//&& !string.IsNullOrEmpty(value)                 {                     if (hasParam)                     {                         postData.Append("&");                     }                     postData.Append(name);                     postData.Append("=");                     if (encode == "gb2312")                     {                         postData.Append(HttpUtility.UrlEncode(value, Encoding.GetEncoding("gb2312")));                     }                     else if (encode == "utf8")                     {                         postData.Append(HttpUtility.UrlEncode(value, Encoding.UTF8));                     }                     else                     {                         postData.Append(value);                     }                     hasParam = true;                 }             }             return postData.ToString();         }           ///         /// 把响应流转换为文本。         ///         /// 响应流对象         /// 编码方式         /// 响应文本         static string GetResponseAsString(HttpWebResponse rsp, Encoding encoding)         {             System.IO.Stream stream = null;             StreamReader reader = null;             try             {                 // 以字符流的方式读取HTTP响应                 stream = rsp.GetResponseStream();                 reader = new StreamReader(stream, encoding);                 return reader.ReadToEnd();             }             finally             {                 // 释放资源                 if (reader != null) reader.Close();                 if (stream != null) stream.Close();                 if (rsp != null) rsp.Close();             }         }     } }