如果需要登录,使用下边方法,如果为匿名登录的,可以省略,在全局变量中定义public static string Cookiemsg,方便重复使用cookie。
1 public static CookieMsg GetCookieMessage(string name, string password) 2 { 3 CookieMsg cookieMsg = null; 4 string retString = ""; 5 try 6 { 7 HttpWebRequest request = (HttpWebRequest)WebRequest.Create("&user=" + name + "&pwd=" + password); 8 9 request.Method = "GET"; 10 request.ContentType = "text/html;charset=UTF-8"; 11 HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 12 13 Stream myResponseStream = response.GetResponseStream(); 14 StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8")); 15 retString = myStreamReader.ReadToEnd(); 16 17 myStreamReader.Close(); 18 myResponseStream.Close(); 19 20 cookieMsg = ManageCookieMsg(retString); 21 } 22 catch (Exception ex) 23 { 24 25 } 26 27 return cookieMsg; 28 } 29 30 31 private static CookieMsg ManageCookieMsg(string json) 32 { 33 34 MemoryStream stream2 = new MemoryStream(); 35 DataContractJsonSerializer ser2 = new DataContractJsonSerializer(typeof(CookieMsg)); 36 StreamWriter wr = new StreamWriter(stream2); 37 CookieMsg cookieMsg = null; 38 try 39 { 40 wr.Write(json); 41 wr.Flush(); 42 stream2.Position = 0; 43 Object obj = ser2.ReadObject(stream2); 44 cookieMsg = (CookieMsg)obj; 45 46 Cookiemsg = "person_id=" + cookieMsg.Person_id + ";" + "identity_id=" + cookieMsg.Identity + ";" + "token=" + cookieMsg.Token; 47 } 48 catch (Exception ex) 49 { 50 51 } 52 53 return cookieMsg; 54 }
需要另一个类中添加封装Json的属性,会将返回的用户信息封装在一个类中。
1 using System.Collections.Generic; 2 using System.Runtime.Serialization; 3 4 #region Cookie 5 6 [DataContract] 7 public class CookieMsg 8 { 9 [DataMember] 10 private string person_id; 11 12 public string Person_id 13 { 14 get { return person_id; } 15 set { person_id = value; } 16 } 17 18 [DataMember] 19 private string person_name; 20 21 public string Person_name 22 { 23 get { return person_name; } 24 set { person_name = value; } 25 } 26 27 [DataMember] 28 private string identity; 29 30 public string Identity 31 { 32 get { return identity; } 33 set { identity = value; } 34 } 35 36 [DataMember] 37 private string token; 38 39 public string Token 40 { 41 get { return token; } 42 set { token = value; } 43 } 44 45 } 46 47 #endregion
下面开始拼装Http的头,获取所需信息。
1 private static string WebMessage(string url) 2 { 3 string retString = ""; 4 try 5 { 6 7 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 8 request.Method = "GET"; 9 request.Accept = "application/json, text/javascript, */*; q=0.01"; 10 request.ContentType = "application/x-www-form-urlencoded"; 11 request.Proxy = null; 12 request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate,sdch"); 13 request.Timeout = 1000; 14 request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36"; 15 request.KeepAlive = true; 16 request.Headers.Add("Accept-Language", "zh-CN,zh;q=0.8"); 17 request.Headers.Add("Cookie", Cookiemsg); 18 19 ////填充参数 20 byte[] param; 21 StringBuilder sb = new StringBuilder(); 22 param = System.Text.Encoding.UTF8.GetBytes(sb.ToString()); 23 request.ContentLength = param.Length; 24 25 HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 26 27 28 Stream myResponseStream = response.GetResponseStream(); 29 if (response.ContentEncoding.ToLower().Contains("gzip")) 30 { 31 32 myResponseStream = new GZipStream(myResponseStream, CompressionMode.Decompress); 33 } 34 StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8")); 35 36 retString = myStreamReader.ReadToEnd(); 37 38 myStreamReader.Close(); 39 myResponseStream.Close(); 40 41 } 42 catch (Exception ex) 43 { 44 45 } 46 return retString; 47 }
返回的Json字符串再使用上面的封装方法,按照实际返回信息进行封装就可以了。