using System; using System.IO; using System.Net; using System.Text; using System.Windows.Forms; namespace RyzStudio.Net { public class HttpWeb { public string defaultUserAgent = "Momozilla/5.0 (" + Environment.OSVersion.Platform.ToString() + " ; " + Environment.OSVersion.VersionString + "; " + Application.CurrentCulture.TwoLetterISOLanguageName + ")"; public int defaultTimeout = 6000; public int defaultMaxRedirect = 8; public bool defaultAllowRedirect = true; public CookieContainer defaultCookierContainer = null; public HttpWeb() { } public HttpWebRequest CreateRequest(string requestURL) => this.CreateRequest(requestURL, requestURL); public HttpWebRequest CreateRequest(string requestURL, string referrerURL) { if (defaultCookierContainer == null) { defaultCookierContainer = new CookieContainer(); } HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(requestURL); webRequest.CachePolicy = new System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.NoCacheNoStore); webRequest.MaximumAutomaticRedirections = defaultMaxRedirect; webRequest.CookieContainer = defaultCookierContainer; webRequest.UserAgent = defaultUserAgent; webRequest.AllowAutoRedirect = defaultAllowRedirect; webRequest.Timeout = defaultTimeout; webRequest.Referer = referrerURL; return webRequest; } public int GetResponse(out string sourceCode, string requestURL) => this.GetResponse(out sourceCode, this.CreateRequest(requestURL)); public int GetResponse(out string sourceCode, string requestURL, string referrerURL) => this.GetResponse(out sourceCode, this.CreateRequest(requestURL, referrerURL)); public int GetResponse(out string sourceCode, HttpWebRequest webRequest) { sourceCode = string.Empty; int rv = 0; try { HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse(); rv = (int)webResponse.StatusCode; StreamReader readContent = new StreamReader(webResponse.GetResponseStream()); sourceCode = readContent.ReadToEnd(); webResponse.Close(); webResponse = null; } catch (WebException xc) { if (xc.Response is HttpWebResponse) { HttpWebResponse rs = xc.Response as HttpWebResponse; StreamReader readContent = new StreamReader(rs.GetResponseStream()); if (readContent != null) { sourceCode = readContent.ReadToEnd(); } rv = (int)rs.StatusCode; } else { rv = (int)xc.Status; sourceCode = xc.Message; } } catch (Exception xc) { sourceCode = xc.Message; } return rv; } public int GetResponse(out HttpWebRequest webRequest, out string sourceCode, string requestURL) => this.GetResponse(out webRequest, out sourceCode, requestURL, requestURL, true); public int GetResponse(out HttpWebRequest webRequest, out string sourceCode, string requestURL, bool allowAutoRedirect) => this.GetResponse(out webRequest, out sourceCode, requestURL, requestURL, allowAutoRedirect); public int GetResponse(out HttpWebRequest webRequest, out string sourceCode, string requestURL, string referrerURL) => this.GetResponse(out webRequest, out sourceCode, requestURL, referrerURL, true); public int GetResponse(out HttpWebRequest webRequest, out string sourceCode, string requestURL, string referrerURL, bool allowAutoRedirect) { webRequest = this.CreateRequest(requestURL, referrerURL); webRequest.AllowAutoRedirect = allowAutoRedirect; return this.GetResponse(out sourceCode, webRequest); } public int GetHEADResponse(string requestURL) => this.GetHEADResponse(requestURL, requestURL, true); public int GetHEADResponse(string requestURL, string referrerURL) => this.GetHEADResponse(requestURL, requestURL, true); public int GetHEADResponse(string requestURL, bool allowAutoRedirect) => this.GetHEADResponse(requestURL, requestURL, allowAutoRedirect); public int GetHEADResponse(string requestURL, string referrerURL, bool allowAutoRedirect) { HttpWebRequest webRequest = this.CreateRequest(requestURL, referrerURL); webRequest.Method = "HEAD"; webRequest.AllowAutoRedirect = allowAutoRedirect; string sc; int rc = this.GetResponse(out sc, webRequest); return rc; } public int GetHEADResponse(out HttpWebRequest webRequest, string requestURL) => this.GetHEADResponse(out webRequest, requestURL, requestURL, true); public int GetHEADResponse(out HttpWebRequest webRequest, string requestURL, string referrerURL) => this.GetHEADResponse(out webRequest, requestURL, referrerURL, true); public int GetHEADResponse(out HttpWebRequest webRequest, string requestURL, bool allowAutoRedirect) => this.GetHEADResponse(out webRequest, requestURL, requestURL, allowAutoRedirect); public int GetHEADResponse(out HttpWebRequest webRequest, string requestURL, string referrerURL, bool allowAutoRedirect) { webRequest = this.CreateRequest(requestURL, referrerURL); webRequest.Method = "HEAD"; webRequest.AllowAutoRedirect = allowAutoRedirect; string sc; int rc = this.GetResponse(out sc, webRequest); return rc; } public int GetPOSTResponse(out string sourceCode, HttpWebRequest webRequest, string postData) { sourceCode = string.Empty; int rv = 0; byte[] buffer = Encoding.UTF8.GetBytes(postData); webRequest.ContentLength = buffer.Length; try { Stream dataStream = webRequest.GetRequestStream(); dataStream.Write(buffer, 0, buffer.Length); dataStream.Close(); } catch (Exception xc) { sourceCode = xc.Message; return rv; } return this.GetResponse(out sourceCode, webRequest); } public int GetHeader(out WebHeaderCollection headerCollection, string url, string referrerURL = "") { headerCollection = null; int rv = 0; HttpWebRequest webRequest = this.CreateRequest(url, referrerURL); webRequest.Method = "HEAD"; try { HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse(); headerCollection = webResponse.Headers; rv = (int)webResponse.StatusCode; webResponse.Close(); webResponse = null; } catch (WebException xc) { if (xc.Response is HttpWebResponse) { HttpWebResponse rs = xc.Response as HttpWebResponse; rv = (int)rs.StatusCode; } else { rv = (int)xc.Status; } } catch (Exception xc) { // do nothing } return rv; } public static HttpWebRequest AddBasicAuthentication(HttpWebRequest webRequest, string username, string password) { webRequest.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes(string.Concat(username, ":", password))); webRequest.PreAuthenticate = true; return webRequest; } } }