using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Linq; using System.Net; using System.Net.Security; using System.Security.Cryptography.X509Certificates; using System.Text; namespace RunUpdater.Lib { public class HttpHelper { #region 方法 -> 检查网站是否可以访问 /// /// 检查网站是否可以访问 /// /// /// public static bool UrlIsExist(string ConnectUrl) { try { // Creates an HttpWebRequest for the specified URL. HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(ConnectUrl); myHttpWebRequest.Timeout = 3 * 1000; // 有些网站会阻止程序访问,需要加入下面这句 myHttpWebRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"; myHttpWebRequest.Method = "GET"; // Sends the HttpWebRequest and waits for a response. HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse(); if (myHttpWebResponse.StatusCode == HttpStatusCode.OK) { myHttpWebResponse.Close(); return true; } else { myHttpWebResponse.Close(); return false; } // Releases the resources of the response. } catch { return false; } } #endregion /// /// 获取标准北京时间 /// /// ///成功:返回服务器当前时间 ///失败:返回DateTime.MinValue /// public static DateTime GetBeijingTime(string timeServerURL, DateTime localDate) { DateTime date_Server = localDate; try { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(timeServerURL); request.Timeout = 3 * 1000; request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"; request.Method = "HEAD"; request.AllowAutoRedirect = false; using (HttpWebResponse reponse = (HttpWebResponse)request.GetResponse()) { if (DateTime.TryParseExact(reponse.GetResponseHeader("date"), "r", new CultureInfo("en-US"), DateTimeStyles.None, out DateTime gmtTime)) { date_Server = gmtTime.ToLocalTime(); //GMT要加8个小时才是北京时间 } reponse.Close(); } } catch (WebException ex) { if (DateTime.TryParseExact(ex.Response.Headers.Get("Date"), "r", new CultureInfo("en-US"), DateTimeStyles.None, out DateTime gmtTime)) { date_Server = gmtTime.ToLocalTime(); //GMT要加8个小时才是北京时间 } } return date_Server; } #region 方法 -> HttpPost /// /// Post请求方法 /// /// /// /// /// /// public static string HttpPost(string postData, string requestURL, string contentType = "application/x-www-form-urlencoded", int timeOut = 0) { try { CookieContainer cookieContainer = new CookieContainer(); byte[] postBytes = Encoding.UTF8.GetBytes(postData); // 设置提交的相关参数 ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestURL); if (timeOut == 0) { timeOut = 5; } request.Timeout = timeOut * 1000; request.Method = "POST"; request.KeepAlive = false; request.ContentType = contentType; request.CookieContainer = cookieContainer; request.ContentLength = postBytes.Length; using (Stream reqStream = request.GetRequestStream()) { //LogHelper.WriteSendLog("==开始写数据=="); reqStream.Write(postBytes, 0, postBytes.Length); //LogHelper.WriteSendLog("==写入完成=="); } using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { //在这里对接收到的页面内容进行处理 //直到request.GetResponse()程序才开始向目标网页发送post请求 Stream responseStream = response.GetResponseStream(); using (StreamReader reader = new StreamReader(responseStream, Encoding.UTF8)) { return reader.ReadToEnd(); } } } catch (WebException wex) { return wex.ToString(); } catch (Exception ex) { return ex.Message; } } private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) { return true; } #endregion } }