| using System; | 
| using System.Collections.Generic; | 
| using System.IO; | 
| using System.Linq; | 
| using System.Net; | 
| using System.Text; | 
| using Newtonsoft.Json.Linq; | 
| using Newtonsoft.Json; | 
| using System.Threading.Tasks; | 
|   | 
| namespace WebAPI | 
| { | 
|     public class HttpClient | 
|     { | 
|         /// <summary> | 
|         /// Seivice URL | 
|         /// </summary> | 
|         public string Url { get; set; } | 
|         /// <summary> | 
|         /// 内容 | 
|         /// </summary> | 
|         public string Content { get; set; } | 
|         /// <summary> | 
|         /// Cookie,保证登录后,所有访问持有一个Cookie; | 
|         /// </summary> | 
|         static CookieContainer Cookie = new CookieContainer(); | 
|   | 
|         /// <summary> | 
|         /// HTTP访问 | 
|         /// </summary> | 
|         public string SyncRequest() | 
|         { | 
|             HttpWebRequest httpRequest = HttpWebRequest.Create(Url) as HttpWebRequest; | 
|             httpRequest.Method = "POST"; | 
|             httpRequest.ContentType = "application/json"; | 
|             httpRequest.CookieContainer = Cookie; | 
|             httpRequest.Timeout = 1000 * 60 * 10;//10min | 
|   | 
|             using (Stream reqStream = httpRequest.GetRequestStream()) | 
|             { | 
|                 JObject jObj = new JObject(); | 
|                 jObj.Add("format", 1); | 
|                 jObj.Add("useragent", "ApiClient"); | 
|                 jObj.Add("rid", Guid.NewGuid().ToString().GetHashCode().ToString()); | 
|                 jObj.Add("parameters", Content); | 
|                 jObj.Add("timestamp", DateTime.Now); | 
|                 jObj.Add("v", "1.0"); | 
|                 string sContent = jObj.ToString(); | 
|                 var bytes = UnicodeEncoding.UTF8.GetBytes(sContent); | 
|                 reqStream.Write(bytes, 0, bytes.Length); | 
|                 reqStream.Flush(); | 
|             } | 
|             using (var repStream = httpRequest.GetResponse().GetResponseStream()) | 
|             { | 
|                 using (var reader = new StreamReader(repStream)) | 
|                 { | 
|                     return ValidateResult(reader.ReadToEnd()); | 
|                 } | 
|             } | 
|         } | 
|   | 
|         public async Task<string> AsyncRequest() | 
|         { | 
|             HttpWebRequest httpRequest = WebRequest.Create(Url) as HttpWebRequest; | 
|             httpRequest.Method = "POST"; | 
|             httpRequest.ContentType = "application/json"; | 
|             httpRequest.CookieContainer = Cookie; | 
|             httpRequest.Timeout = 1000 * 60 * 10;//10min | 
|   | 
|             using (Stream reqStream = await httpRequest.GetRequestStreamAsync()) | 
|             { | 
|                 JObject jObj = new JObject(); | 
|                 jObj.Add("format", 1); | 
|                 jObj.Add("useragent", "ApiClient"); | 
|                 jObj.Add("rid", Guid.NewGuid().ToString().GetHashCode().ToString()); | 
|                 jObj.Add("parameters", Content); | 
|                 jObj.Add("timestamp", DateTime.Now); | 
|                 jObj.Add("v", "1.0"); | 
|                 string content = jObj.ToString(); | 
|                 var bytes = Encoding.UTF8.GetBytes(content); | 
|                 reqStream.Write(bytes, 0, bytes.Length); | 
|                 reqStream.Flush(); | 
|             } | 
|             using (var repStream = (await httpRequest.GetResponseAsync()).GetResponseStream()) | 
|             { | 
|                 using (var reader = new StreamReader(repStream)) | 
|                 { | 
|                     return ValidateResult(await reader.ReadToEndAsync()); | 
|                 } | 
|             } | 
|         } | 
|   | 
|         private static string ValidateResult(string responseText) | 
|         { | 
|             if (responseText.StartsWith("response_error:")) | 
|             { | 
|                 responseText.TrimStart("response_error:".ToCharArray()); | 
|             } | 
|             return responseText; | 
|         } | 
|   | 
|   | 
|         /// <summary> | 
|         /// 异步Get | 
|         /// </summary> | 
|         /// <returns></returns> | 
|         public async Task<string> AsyncGetRequest() | 
|         { | 
|             HttpWebRequest httpRequest = WebRequest.Create(Url) as HttpWebRequest; | 
|             httpRequest.Method = "GET"; | 
|             httpRequest.ContentType = "application/json"; | 
|             httpRequest.CookieContainer = Cookie; | 
|             httpRequest.Timeout = 1000 * 60 * 10;//10min | 
|   | 
|             using (Stream reqStream = await httpRequest.GetRequestStreamAsync()) | 
|             { | 
|                 JObject jObj = new JObject(); | 
|                 jObj.Add("format", 1); | 
|                 jObj.Add("useragent", "ApiClient"); | 
|                 jObj.Add("rid", Guid.NewGuid().ToString().GetHashCode().ToString()); | 
|                 jObj.Add("parameters", Content); | 
|                 jObj.Add("timestamp", DateTime.Now); | 
|                 jObj.Add("v", "1.0"); | 
|                 string content = jObj.ToString(); | 
|                 var bytes = Encoding.UTF8.GetBytes(content); | 
|                 reqStream.Write(bytes, 0, bytes.Length); | 
|                 reqStream.Flush(); | 
|             } | 
|             using (var repStream = (await httpRequest.GetResponseAsync()).GetResponseStream()) | 
|             { | 
|                 using (var reader = new StreamReader(repStream)) | 
|                 { | 
|                     return ValidateResult(await reader.ReadToEndAsync()); | 
|                 } | 
|             } | 
|         } | 
|     } | 
| } |