using System; using System.Globalization; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Web; using System.Net; using System.IO; namespace CallCenter.Utility { /// /// 页面获取数据类 /// public class RequestString { /// /// 判断当前页面是否接收到了Post请求 /// /// 是否接收到了Post请求 public static bool IsPost() { return HttpContext.Current.Request.HttpMethod.Equals("POST"); } /// /// 判断当前页面是否接收到了Get请求 /// /// 是否接收到了Get请求 public static bool IsGet() { return HttpContext.Current.Request.HttpMethod.Equals("GET"); } /// /// 返回URL中结尾的文件名 /// public static string GetFilename(string url) { if (url == null) { return ""; } string[] strs1 = url.Split(new[] { '/' }); return strs1[strs1.Length - 1].Split(new[] { '?' })[0]; } /// /// 返回指定的服务器变量信息 /// /// 服务器变量名 /// 服务器变量信息 public static string GetServerString(string strName) { if (HttpContext.Current.Request.ServerVariables[strName] == null) return ""; return HttpContext.Current.Request.ServerVariables[strName]; } /// /// 返回上一个页面的地址 /// /// 上一个页面的地址 public static string GetUrlReferrer() { string retVal = null; try { if (HttpContext.Current.Request.UrlReferrer != null) retVal = HttpContext.Current.Request.UrlReferrer.ToString(); } catch (Exception) { } if (retVal == null) return ""; return retVal; } /// /// 得到当前完整主机头 /// /// public static string GetCurrentFullHost() { HttpRequest request = HttpContext.Current.Request; if (!request.Url.IsDefaultPort) return string.Format("{0}:{1}", request.Url.Host, request.Url.Port.ToString(CultureInfo.InvariantCulture)); return request.Url.Host; } /// /// 得到主机头 /// /// public static string GetHost() { return HttpContext.Current.Request.Url.Host; } /// /// 得到主机名 /// public static string GetDnsSafeHost() { return HttpContext.Current.Request.Url.DnsSafeHost; } /// /// 获取当前请求的原始 URL(URL 中域信息之后的部分,包括查询字符串(如果存在)) /// /// 原始 URL public static string GetRawUrl() { return HttpContext.Current.Request.RawUrl; } /// /// 判断当前访问是否来自浏览器软件 /// /// 当前访问是否来自浏览器软件 public static bool IsBrowserGet() { string[] BrowserName = { "ie", "opera", "netscape", "mozilla", "konqueror", "firefox" }; string curBrowser = HttpContext.Current.Request.Browser.Type.ToLower(); return BrowserName.Any(t => curBrowser.IndexOf(t, StringComparison.Ordinal) >= 0); } /// /// 判断是否来自搜索引擎链接 /// /// 是否来自搜索引擎链接 public static bool IsSearchEnginesGet() { if (HttpContext.Current.Request.UrlReferrer == null) return false; string[] SearchEngine = { "google", "yahoo", "msn", "baidu", "sogou", "sohu", "sina", "163", "lycos", "tom", "yisou", "iask", "soso", "gougou", "zhongsou" }; string tmpReferrer = HttpContext.Current.Request.UrlReferrer.ToString().ToLower(); return SearchEngine.Any(t => tmpReferrer.IndexOf(t, StringComparison.Ordinal) >= 0); } /// /// 获得当前完整Url地址 /// /// 当前完整Url地址 public static string GetUrl() { return HttpContext.Current.Request.Url.ToString(); } /// /// 获取文件 /// /// /// public static HttpPostedFile GetFile(string strName) { return HttpContext.Current.Request.Files[strName]; } /// /// 获取文件 /// /// public static HttpFileCollection GetFiles() { return HttpContext.Current.Request.Files; } /// /// 获取stream /// /// public static Stream GetInputStream() { return HttpContext.Current.Request.InputStream; } /// /// 获得指定Url参数的值 /// /// Url参数 /// Url参数的值 public static string GetQueryString(string strName) { return GetQueryString(strName, false); } /// /// 获得指定Url参数的值 /// /// Url参数 /// 是否进行SQL安全检查 /// Url参数的值 public static string GetQueryString(string strName, bool sqlSafeCheck) { if (HttpContext.Current.Request.QueryString[strName] == null) return ""; if (sqlSafeCheck && !IsSafeSqlString(HttpContext.Current.Request.QueryString[strName])) return ""; return HttpContext.Current.Request.QueryString[strName]; } /// /// 获得指定Url参数的值 /// /// Url参数 /// 是否进行SQL安全检查 /// 当SQL安全检查不通过或无值时的默认值 /// Url参数的值 public static string GetQueryString(string strName, bool sqlSafeCheck, string defValue) { if (HttpContext.Current.Request.QueryString[strName] == null) return defValue; if (sqlSafeCheck && !IsSafeSqlString(HttpContext.Current.Request.QueryString[strName])) return defValue; return HttpContext.Current.Request.QueryString[strName]; } /// /// SQL危险字符过滤 /// /// 要过滤的字符串 /// 安全级别{1最高} /// public static string FilterSql(string source, int SafeLevel) { //单引号替换成两个单引号 source = source.Replace("'", "''"); source = source.Replace("--", "--"); if (SafeLevel == 1) { //单引号替换成两个单引号 source = source.Replace("\"", "“"); source = source.Replace("|", "|"); //半角封号替换为全角封号,防止多语句执行 source = source.Replace(";", ";"); source = source.Replace("=", "="); //半角括号替换为全角括号 source = source.Replace("(", "("); source = source.Replace(")", ")"); } return source; } /// /// 检测是否有Sql危险字符 /// /// 要判断字符串 /// 判断结果 public static bool IsSafeSqlString(string str) { return !Regex.IsMatch(str, @"[-|;|,|\/|\(|\)|\[|\]|\}|\{|%|@|\*|!|\']"); } /// /// 检测是否有危险的可能用于链接的字符串 /// /// 要判断字符串 /// 判断结果 public static bool IsSafeUserInfoString(string str) { return !Regex.IsMatch(str, @"^\s*$|^c:\\con\\con$|[%,\*" + "\"" + @"\s\t\<\>\&]|游客|^Guest"); } /// /// 获得当前页面的名称 /// /// 当前页面的名称 public static string GetPageName() { string[] urlArr = HttpContext.Current.Request.Url.AbsolutePath.Split('/'); return urlArr[urlArr.Length - 1].ToLower(); } /// /// 返回表单或Url参数的总个数 /// /// public static int GetParamCount() { return HttpContext.Current.Request.Form.Count + HttpContext.Current.Request.QueryString.Count; } /// /// 获得指定表单参数的值 /// /// 表单参数 /// 表单参数的值 public static string GetFormString(string strName) { return GetFormString(strName, false); } /// /// 获得指定表单参数的值 /// /// 表单参数 /// 是否进行SQL安全检查 /// 表单参数的值 public static string GetFormString(string strName, bool sqlSafeCheck) { if (HttpContext.Current.Request.Form[strName] == null) return ""; if (sqlSafeCheck && !IsSafeSqlString(HttpContext.Current.Request.Form[strName])) return ""; return HttpContext.Current.Request.Form[strName]; } /// /// 获得指定表单参数的值 /// /// 表单参数 /// 是否进行SQL安全检查 /// 当SQL安全检查不通过或无值时的默认值 /// 表单参数的值 public static string GetFormString(string strName, bool sqlSafeCheck, string defValue) { if (HttpContext.Current.Request.Form[strName] == null) return defValue; if (sqlSafeCheck && !IsSafeSqlString(HttpContext.Current.Request.Form[strName])) return defValue; return HttpContext.Current.Request.Form[strName]; } /// /// 获得Url或表单参数的值, 先判断Url参数是否为空字符串, 如为True则返回表单参数的值 /// /// 参数 /// Url或表单参数的值 public static string GetString(string strName) { return GetString(strName, false); } /// /// 获得Url或表单参数的值, 先判断Url参数是否为空字符串, 如为True则返回表单参数的值 /// /// 参数 /// 是否进行SQL安全检查 /// Url或表单参数的值 public static string GetString(string strName, bool sqlSafeCheck) { if ("".Equals(GetQueryString(strName))) return GetFormString(strName, sqlSafeCheck); return GetQueryString(strName, sqlSafeCheck); } /// /// 获得Url或表单参数的值, 先判断Url参数是否为空字符串, 如为True则返回表单参数的值 /// /// 参数 /// 是否进行SQL安全检查 /// 当SQL安全检查不通过或无值时的默认值 /// Url或表单参数的值 public static string GetString(string strName, bool sqlSafeCheck, string defValue) { if ("".Equals(GetQueryString(strName))) return GetFormString(strName, sqlSafeCheck, defValue); return GetQueryString(strName, sqlSafeCheck, defValue); } /// /// 获得指定Url参数的int类型值 /// /// Url参数 /// Url参数的int类型值 public static int GetQueryInt(string strName) { return TypeConverter.StrToInt(HttpContext.Current.Request.QueryString[strName], 0); } /// /// 获得指定Url参数的int类型值 /// /// Url参数 /// 缺省值 /// Url参数的int类型值 public static int GetQueryInt(string strName, int defValue) { return TypeConverter.StrToInt(HttpContext.Current.Request.QueryString[strName], defValue); } /// /// 获得指定表单参数的int类型值 /// /// 表单参数 /// 缺省值 /// 表单参数的int类型值 public static int GetFormInt(string strName, int defValue) { return TypeConverter.StrToInt(HttpContext.Current.Request.Form[strName], defValue); } /// /// 获得指定Url或表单参数的int类型值, 先判断Url参数是否为缺省值, 如为True则返回表单参数的值 /// /// Url或表单参数 /// 缺省值 /// Url或表单参数的int类型值 public static int GetInt(string strName, int defValue) { if (GetQueryInt(strName, defValue) == defValue) return GetFormInt(strName, defValue); return GetQueryInt(strName, defValue); } /// /// 获得指定Url参数的float类型值 /// /// Url参数 /// 缺省值 /// Url参数的int类型值 public static float GetQueryFloat(string strName, float defValue) { return TypeConverter.StrToFloat(HttpContext.Current.Request.QueryString[strName], defValue); } /// /// 获得指定表单参数的float类型值 /// /// 表单参数 /// 缺省值 /// 表单参数的float类型值 public static float GetFormFloat(string strName, float defValue) { return TypeConverter.StrToFloat(HttpContext.Current.Request.Form[strName], defValue); } /// /// 获得指定Url或表单参数的float类型值, 先判断Url参数是否为缺省值, 如为True则返回表单参数的值 /// /// Url或表单参数 /// 缺省值 /// Url或表单参数的int类型值 public static float GetFloat(string strName, float defValue) { if (GetQueryFloat(strName, defValue) == defValue) return GetFormFloat(strName, defValue); return GetQueryFloat(strName, defValue); } /// /// 获得当前页面客户端的IP /// /// 当前页面客户端的IP public static string GetIP() { try { string result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; if (string.IsNullOrEmpty(result)) result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (string.IsNullOrEmpty(result)) result = HttpContext.Current.Request.UserHostAddress; if (string.IsNullOrEmpty(result) || !ValidateString.IsIP(result)) return "127.0.0.1"; return result; } catch { return "127.0.0.1"; } } /// /// 获取URL地址的网页内容 /// public class GetUrlText { /// /// Gets the text. /// /// 地址 The URL. /// 编码 The encoding. /// public static string GetText(string url, string Encoding) { WebResponse wr_result = null; var txthtml = new StringBuilder(); try { WebRequest wr_req = WebRequest.Create(url); wr_result = wr_req.GetResponse(); Stream ReceiveStream = wr_result.GetResponseStream(); Encoding encode = System.Text.Encoding.GetEncoding(Encoding); var sr = new StreamReader(ReceiveStream, encode); if (true) { var read = new Char[256]; int count = sr.Read(read, 0, 256); while (count > 0) { var str = new String(read, 0, count); txthtml.Append(str); count = sr.Read(read, 0, 256); } } } catch (Exception) { txthtml.Append("err"); } finally { if (wr_result != null) { wr_result.Close(); } } return txthtml.ToString(); } public static string GetText(string HttpUrl) { try { HttpHelper http = new HttpHelper(); HttpItem item = new HttpItem() { URL = HttpUrl,//URL 必需项 Method = "get",//URL 可选项 默认为Get IsToLower = false,//得到的HTML代码是否转成小写 可选项默认转小写 Cookie = "",//字符串Cookie 可选项 Referer = "",//来源URL 可选项 Postdata = "",//Post数据 可选项GET时不需要写 Timeout = 100000,//连接超时时间 可选项默认为100000 ReadWriteTimeout = 30000,//写入Post数据超时时间 可选项默认为30000 ContentType = "text/html",//返回类型 可选项有默认值 Allowautoredirect = false,//是否根据301跳转 可选项 //CerPath = "d:\123.cer",//证书绝对路径 可选项不需要证书时可以不写这个参数 //Connectionlimit = 1024,//最大连接数 可选项 默认为1024 ProxyIp = "",//代理服务器ID 可选项 不需要代理 时可以不设置这三个参数 //ProxyPwd = "123456",//代理服务器密码 可选项 //ProxyUserName = "administrator",//代理服务器账户名 可选项 }; var result = http.GetHtml(item); string html = result.Html; return html; //var request = (HttpWebRequest)HttpWebRequest.Create(HttpUrl); //var response = (HttpWebResponse)request.GetResponse(); //var strConfig = String.Empty; //using (var reader = new StreamReader(response.GetResponseStream())) //{ // strConfig = reader.ReadToEnd(); //} //return strConfig; } catch (Exception) { return ""; } } } /// 转全角的函数(SBC case) /// ///任意字符串 ///全角字符串 /// ///全角空格为12288,半角空格为32 ///其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248 /// public static String ToSBC(String input) { // 半角转全角: char[] c = input.ToCharArray(); for (int i = 0; i < c.Length; i++) { if (c[i] == 32) { c[i] = (char)12288; continue; } if (c[i] < 127) c[i] = (char)(c[i] + 65248); } return new String(c); } /**/ // / // / 转半角的函数(DBC case) // / // /任意字符串 // /半角字符串 // / // /全角空格为12288,半角空格为32 // /其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248 // / public static String ToDBC(String input) { char[] c = input.ToCharArray(); for (int i = 0; i < c.Length; i++) { if (c[i] == 12288) { c[i] = (char)32; continue; } if (c[i] > 65280 && c[i] < 65375) c[i] = (char)(c[i] - 65248); } return new String(c); } /// /// 去掉所有的非数字 /// /// /// public static string RemoveNotNumber(string key) { return Regex.Replace(key, @"[^\d]*", ""); } /// /// 去掉所有的数字 /// /// /// public static string RemoveNumber(string key) { return Regex.Replace(key, @"\d", ""); } } }