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 { /// /// Seivice URL /// public string Url { get; set; } /// /// 内容 /// public string Content { get; set; } /// /// Cookie,保证登录后,所有访问持有一个Cookie; /// static CookieContainer Cookie = new CookieContainer(); /// /// HTTP访问 /// 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 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; } /// /// 异步Get /// /// public async Task 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()); } } } } }