第一种,这种方法对汉字进行了加密,会出现乱码,但解析之后就是正常汉字了。
代码如下
StringBuilder serviceUrl = new StringBuilder();
serviceUrl.Append("http://xxx/queryOrderOne?");
serviceUrl.AppendFormat("id={0}", _id);
string _result = ExcuteGet1(serviceUrl.ToString(),"");
ExcuteGet1方法代码
public static string ExcuteGet1(string serviceUrl, string ReqInfo)
{
using (null)
{
ServicePointManager.ServerCertificateValidationCallback += ValidateServerCertificate;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(serviceUrl);
request.CookieContainer = new CookieContainer();
request.Headers.Add("userName", "lvkang"); //设置信息头用户名
request.Headers.Add("password", "12345"); //设置信息头密码
request.KeepAlive = true;
request.Method = "GET"; request.ContentType = "application/x-www-form-urlencoded";
//添加发送数据
Encoding encoding = Encoding.GetEncoding("GBK");
if (!ReqInfo.Equals(""))
{
ReqInfo = "request=" + ReqInfo;
byte[] postData = encoding.GetBytes(ReqInfo);
request.ContentLength = postData.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(postData, 0, postData.Length);
}
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
//获取返回数据
Stream responseStream = response.GetResponseStream();
if (responseStream == null) return "";
StreamReader streamReader = new StreamReader(responseStream, encoding);
string retString = streamReader.ReadToEnd();
streamReader.Close();
responseStream.Close();
return retString;
}
}
private static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
return true;
}
这种方法就是返回的result里的中文是乱码,但是使用json的转换之后又好了,原理不是很理解。
OrderList _addResult = _jsonResult.JsonTodeserialize<OrderList>(Encoding.Default);
public static T JsonTodeserialize<T>(this string json, Encoding _encoding)
{
using (null)
{
try
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
T obj = default(T);
using (MemoryStream ms = new MemoryStream(_encoding.GetBytes(json)))
{
obj = (T)serializer.ReadObject(ms);
ms.Close();
}
return obj;
}
catch (Exception)
{
return default(T);
}
}
}
解析的方法如上。
第二种,简单
ExcuteGet2方法代码
public static string ExcuteGet2(string url)
{
var request = (HttpWebRequest)WebRequest.Create(url);
var response = (HttpWebResponse)request.GetResponse();
return new StreamReader(response.GetResponseStream()).ReadToEnd();
}
解析结果用的方法是
JsonConvert.DeserializeObject<Order>(_result)
用的是Newtonsoft.Json.dll里的一个方法。