Нет описания

RequestString.cs 23KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654
  1. using System;
  2. using System.Globalization;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Text.RegularExpressions;
  6. using System.Web;
  7. using System.Net;
  8. using System.IO;
  9. namespace CallCenter.Utility
  10. {
  11. /// <summary>
  12. /// 页面获取数据类
  13. /// </summary>
  14. public class RequestString
  15. {
  16. /// <summary>
  17. /// 判断当前页面是否接收到了Post请求
  18. /// </summary>
  19. /// <returns>是否接收到了Post请求</returns>
  20. public static bool IsPost()
  21. {
  22. return HttpContext.Current.Request.HttpMethod.Equals("POST");
  23. }
  24. /// <summary>
  25. /// 判断当前页面是否接收到了Get请求
  26. /// </summary>
  27. /// <returns>是否接收到了Get请求</returns>
  28. public static bool IsGet()
  29. {
  30. return HttpContext.Current.Request.HttpMethod.Equals("GET");
  31. }
  32. /// <summary>
  33. /// 返回URL中结尾的文件名
  34. /// </summary>
  35. public static string GetFilename(string url)
  36. {
  37. if (url == null)
  38. {
  39. return "";
  40. }
  41. string[] strs1 = url.Split(new[] { '/' });
  42. return strs1[strs1.Length - 1].Split(new[] { '?' })[0];
  43. }
  44. /// <summary>
  45. /// 返回指定的服务器变量信息
  46. /// </summary>
  47. /// <param name="strName">服务器变量名</param>
  48. /// <returns>服务器变量信息</returns>
  49. public static string GetServerString(string strName)
  50. {
  51. if (HttpContext.Current.Request.ServerVariables[strName] == null)
  52. return "";
  53. return HttpContext.Current.Request.ServerVariables[strName];
  54. }
  55. /// <summary>
  56. /// 返回上一个页面的地址
  57. /// </summary>
  58. /// <returns>上一个页面的地址</returns>
  59. public static string GetUrlReferrer()
  60. {
  61. string retVal = null;
  62. try
  63. {
  64. if (HttpContext.Current.Request.UrlReferrer != null)
  65. retVal = HttpContext.Current.Request.UrlReferrer.ToString();
  66. }
  67. catch (Exception)
  68. { }
  69. if (retVal == null)
  70. return "";
  71. return retVal;
  72. }
  73. /// <summary>
  74. /// 得到当前完整主机头
  75. /// </summary>
  76. /// <returns></returns>
  77. public static string GetCurrentFullHost()
  78. {
  79. HttpRequest request = HttpContext.Current.Request;
  80. if (!request.Url.IsDefaultPort)
  81. return string.Format("{0}:{1}", request.Url.Host, request.Url.Port.ToString(CultureInfo.InvariantCulture));
  82. return request.Url.Host;
  83. }
  84. /// <summary>
  85. /// 得到主机头
  86. /// </summary>
  87. /// <returns></returns>
  88. public static string GetHost()
  89. {
  90. return HttpContext.Current.Request.Url.Host;
  91. }
  92. /// <summary>
  93. /// 得到主机名
  94. /// </summary>
  95. public static string GetDnsSafeHost()
  96. {
  97. return HttpContext.Current.Request.Url.DnsSafeHost;
  98. }
  99. /// <summary>
  100. /// 获取当前请求的原始 URL(URL 中域信息之后的部分,包括查询字符串(如果存在))
  101. /// </summary>
  102. /// <returns>原始 URL</returns>
  103. public static string GetRawUrl()
  104. {
  105. return HttpContext.Current.Request.RawUrl;
  106. }
  107. /// <summary>
  108. /// 判断当前访问是否来自浏览器软件
  109. /// </summary>
  110. /// <returns>当前访问是否来自浏览器软件</returns>
  111. public static bool IsBrowserGet()
  112. {
  113. string[] BrowserName = { "ie", "opera", "netscape", "mozilla", "konqueror", "firefox" };
  114. string curBrowser = HttpContext.Current.Request.Browser.Type.ToLower();
  115. return BrowserName.Any(t => curBrowser.IndexOf(t, StringComparison.Ordinal) >= 0);
  116. }
  117. /// <summary>
  118. /// 判断是否来自搜索引擎链接
  119. /// </summary>
  120. /// <returns>是否来自搜索引擎链接</returns>
  121. public static bool IsSearchEnginesGet()
  122. {
  123. if (HttpContext.Current.Request.UrlReferrer == null)
  124. return false;
  125. string[] SearchEngine = { "google", "yahoo", "msn", "baidu", "sogou", "sohu", "sina", "163", "lycos", "tom", "yisou", "iask", "soso", "gougou", "zhongsou" };
  126. string tmpReferrer = HttpContext.Current.Request.UrlReferrer.ToString().ToLower();
  127. return SearchEngine.Any(t => tmpReferrer.IndexOf(t, StringComparison.Ordinal) >= 0);
  128. }
  129. /// <summary>
  130. /// 获得当前完整Url地址
  131. /// </summary>
  132. /// <returns>当前完整Url地址</returns>
  133. public static string GetUrl()
  134. {
  135. return HttpContext.Current.Request.Url.ToString();
  136. }
  137. /// <summary>
  138. /// 获取文件
  139. /// </summary>
  140. /// <param name="strName"></param>
  141. /// <returns></returns>
  142. public static HttpPostedFile GetFile(string strName)
  143. {
  144. return HttpContext.Current.Request.Files[strName];
  145. }
  146. /// <summary>
  147. /// 获取文件
  148. /// </summary>
  149. /// <returns></returns>
  150. public static HttpFileCollection GetFiles()
  151. {
  152. return HttpContext.Current.Request.Files;
  153. }
  154. /// <summary>
  155. /// 获取stream
  156. /// </summary>
  157. /// <returns></returns>
  158. public static Stream GetInputStream()
  159. {
  160. return HttpContext.Current.Request.InputStream;
  161. }
  162. /// <summary>
  163. /// 获得指定Url参数的值
  164. /// </summary>
  165. /// <param name="strName">Url参数</param>
  166. /// <returns>Url参数的值</returns>
  167. public static string GetQueryString(string strName)
  168. {
  169. return GetQueryString(strName, false);
  170. }
  171. /// <summary>
  172. /// 获得指定Url参数的值
  173. /// </summary>
  174. /// <param name="strName">Url参数</param>
  175. /// <param name="sqlSafeCheck">是否进行SQL安全检查</param>
  176. /// <returns>Url参数的值</returns>
  177. public static string GetQueryString(string strName, bool sqlSafeCheck)
  178. {
  179. if (HttpContext.Current.Request.QueryString[strName] == null)
  180. return "";
  181. if (sqlSafeCheck && !IsSafeSqlString(HttpContext.Current.Request.QueryString[strName]))
  182. return "";
  183. return HttpContext.Current.Request.QueryString[strName];
  184. }
  185. /// <summary>
  186. /// 获得指定Url参数的值
  187. /// </summary>
  188. /// <param name="strName">Url参数</param>
  189. /// <param name="sqlSafeCheck">是否进行SQL安全检查</param>
  190. /// <param name="defValue">当SQL安全检查不通过或无值时的默认值</param>
  191. /// <returns>Url参数的值</returns>
  192. public static string GetQueryString(string strName, bool sqlSafeCheck, string defValue)
  193. {
  194. if (HttpContext.Current.Request.QueryString[strName] == null)
  195. return defValue;
  196. if (sqlSafeCheck && !IsSafeSqlString(HttpContext.Current.Request.QueryString[strName]))
  197. return defValue;
  198. return HttpContext.Current.Request.QueryString[strName];
  199. }
  200. /// <summary>
  201. /// SQL危险字符过滤
  202. /// </summary>
  203. /// <param name="source">要过滤的字符串</param>
  204. /// <param name="SafeLevel">安全级别{1最高}</param>
  205. /// <returns></returns>
  206. public static string FilterSql(string source, int SafeLevel)
  207. {
  208. //单引号替换成两个单引号
  209. source = source.Replace("'", "''");
  210. source = source.Replace("--", "--");
  211. if (SafeLevel == 1)
  212. {
  213. //单引号替换成两个单引号
  214. source = source.Replace("\"", "“");
  215. source = source.Replace("|", "|");
  216. //半角封号替换为全角封号,防止多语句执行
  217. source = source.Replace(";", ";");
  218. source = source.Replace("=", "=");
  219. //半角括号替换为全角括号
  220. source = source.Replace("(", "(");
  221. source = source.Replace(")", ")");
  222. }
  223. return source;
  224. }
  225. /// <summary>
  226. /// 检测是否有Sql危险字符
  227. /// </summary>
  228. /// <param name="str">要判断字符串</param>
  229. /// <returns>判断结果</returns>
  230. public static bool IsSafeSqlString(string str)
  231. {
  232. return !Regex.IsMatch(str, @"[-|;|,|\/|\(|\)|\[|\]|\}|\{|%|@|\*|!|\']");
  233. }
  234. /// <summary>
  235. /// 检测是否有危险的可能用于链接的字符串
  236. /// </summary>
  237. /// <param name="str">要判断字符串</param>
  238. /// <returns>判断结果</returns>
  239. public static bool IsSafeUserInfoString(string str)
  240. {
  241. return !Regex.IsMatch(str, @"^\s*$|^c:\\con\\con$|[%,\*" + "\"" + @"\s\t\<\>\&]|游客|^Guest");
  242. }
  243. /// <summary>
  244. /// 获得当前页面的名称
  245. /// </summary>
  246. /// <returns>当前页面的名称</returns>
  247. public static string GetPageName()
  248. {
  249. string[] urlArr = HttpContext.Current.Request.Url.AbsolutePath.Split('/');
  250. return urlArr[urlArr.Length - 1].ToLower();
  251. }
  252. /// <summary>
  253. /// 返回表单或Url参数的总个数
  254. /// </summary>
  255. /// <returns></returns>
  256. public static int GetParamCount()
  257. {
  258. return HttpContext.Current.Request.Form.Count + HttpContext.Current.Request.QueryString.Count;
  259. }
  260. /// <summary>
  261. /// 获得指定表单参数的值
  262. /// </summary>
  263. /// <param name="strName">表单参数</param>
  264. /// <returns>表单参数的值</returns>
  265. public static string GetFormString(string strName)
  266. {
  267. return GetFormString(strName, false);
  268. }
  269. /// <summary>
  270. /// 获得指定表单参数的值
  271. /// </summary>
  272. /// <param name="strName">表单参数</param>
  273. /// <param name="sqlSafeCheck">是否进行SQL安全检查</param>
  274. /// <returns>表单参数的值</returns>
  275. public static string GetFormString(string strName, bool sqlSafeCheck)
  276. {
  277. if (HttpContext.Current.Request.Form[strName] == null)
  278. return "";
  279. if (sqlSafeCheck && !IsSafeSqlString(HttpContext.Current.Request.Form[strName]))
  280. return "";
  281. return HttpContext.Current.Request.Form[strName];
  282. }
  283. /// <summary>
  284. /// 获得指定表单参数的值
  285. /// </summary>
  286. /// <param name="strName">表单参数</param>
  287. /// <param name="sqlSafeCheck">是否进行SQL安全检查</param>
  288. /// <param name="defValue">当SQL安全检查不通过或无值时的默认值</param>
  289. /// <returns>表单参数的值</returns>
  290. public static string GetFormString(string strName, bool sqlSafeCheck, string defValue)
  291. {
  292. if (HttpContext.Current.Request.Form[strName] == null)
  293. return defValue;
  294. if (sqlSafeCheck && !IsSafeSqlString(HttpContext.Current.Request.Form[strName]))
  295. return defValue;
  296. return HttpContext.Current.Request.Form[strName];
  297. }
  298. /// <summary>
  299. /// 获得Url或表单参数的值, 先判断Url参数是否为空字符串, 如为True则返回表单参数的值
  300. /// </summary>
  301. /// <param name="strName">参数</param>
  302. /// <returns>Url或表单参数的值</returns>
  303. public static string GetString(string strName)
  304. {
  305. return GetString(strName, false);
  306. }
  307. /// <summary>
  308. /// 获得Url或表单参数的值, 先判断Url参数是否为空字符串, 如为True则返回表单参数的值
  309. /// </summary>
  310. /// <param name="strName">参数</param>
  311. /// <param name="sqlSafeCheck">是否进行SQL安全检查</param>
  312. /// <returns>Url或表单参数的值</returns>
  313. public static string GetString(string strName, bool sqlSafeCheck)
  314. {
  315. if ("".Equals(GetQueryString(strName)))
  316. return GetFormString(strName, sqlSafeCheck);
  317. return GetQueryString(strName, sqlSafeCheck);
  318. }
  319. /// <summary>
  320. /// 获得Url或表单参数的值, 先判断Url参数是否为空字符串, 如为True则返回表单参数的值
  321. /// </summary>
  322. /// <param name="strName">参数</param>
  323. /// <param name="sqlSafeCheck">是否进行SQL安全检查</param>
  324. /// <param name="defValue">当SQL安全检查不通过或无值时的默认值</param>
  325. /// <returns>Url或表单参数的值</returns>
  326. public static string GetString(string strName, bool sqlSafeCheck, string defValue)
  327. {
  328. if ("".Equals(GetQueryString(strName)))
  329. return GetFormString(strName, sqlSafeCheck, defValue);
  330. return GetQueryString(strName, sqlSafeCheck, defValue);
  331. }
  332. /// <summary>
  333. /// 获得指定Url参数的int类型值
  334. /// </summary>
  335. /// <param name="strName">Url参数</param>
  336. /// <returns>Url参数的int类型值</returns>
  337. public static int GetQueryInt(string strName)
  338. {
  339. return TypeConverter.StrToInt(HttpContext.Current.Request.QueryString[strName], 0);
  340. }
  341. /// <summary>
  342. /// 获得指定Url参数的int类型值
  343. /// </summary>
  344. /// <param name="strName">Url参数</param>
  345. /// <param name="defValue">缺省值</param>
  346. /// <returns>Url参数的int类型值</returns>
  347. public static int GetQueryInt(string strName, int defValue)
  348. {
  349. return TypeConverter.StrToInt(HttpContext.Current.Request.QueryString[strName], defValue);
  350. }
  351. /// <summary>
  352. /// 获得指定表单参数的int类型值
  353. /// </summary>
  354. /// <param name="strName">表单参数</param>
  355. /// <param name="defValue">缺省值</param>
  356. /// <returns>表单参数的int类型值</returns>
  357. public static int GetFormInt(string strName, int defValue)
  358. {
  359. return TypeConverter.StrToInt(HttpContext.Current.Request.Form[strName], defValue);
  360. }
  361. /// <summary>
  362. /// 获得指定Url或表单参数的int类型值, 先判断Url参数是否为缺省值, 如为True则返回表单参数的值
  363. /// </summary>
  364. /// <param name="strName">Url或表单参数</param>
  365. /// <param name="defValue">缺省值</param>
  366. /// <returns>Url或表单参数的int类型值</returns>
  367. public static int GetInt(string strName, int defValue)
  368. {
  369. if (GetQueryInt(strName, defValue) == defValue)
  370. return GetFormInt(strName, defValue);
  371. return GetQueryInt(strName, defValue);
  372. }
  373. /// <summary>
  374. /// 获得指定Url参数的float类型值
  375. /// </summary>
  376. /// <param name="strName">Url参数</param>
  377. /// <param name="defValue">缺省值</param>
  378. /// <returns>Url参数的int类型值</returns>
  379. public static float GetQueryFloat(string strName, float defValue)
  380. {
  381. return TypeConverter.StrToFloat(HttpContext.Current.Request.QueryString[strName], defValue);
  382. }
  383. /// <summary>
  384. /// 获得指定表单参数的float类型值
  385. /// </summary>
  386. /// <param name="strName">表单参数</param>
  387. /// <param name="defValue">缺省值</param>
  388. /// <returns>表单参数的float类型值</returns>
  389. public static float GetFormFloat(string strName, float defValue)
  390. {
  391. return TypeConverter.StrToFloat(HttpContext.Current.Request.Form[strName], defValue);
  392. }
  393. /// <summary>
  394. /// 获得指定Url或表单参数的float类型值, 先判断Url参数是否为缺省值, 如为True则返回表单参数的值
  395. /// </summary>
  396. /// <param name="strName">Url或表单参数</param>
  397. /// <param name="defValue">缺省值</param>
  398. /// <returns>Url或表单参数的int类型值</returns>
  399. public static float GetFloat(string strName, float defValue)
  400. {
  401. if (GetQueryFloat(strName, defValue) == defValue)
  402. return GetFormFloat(strName, defValue);
  403. return GetQueryFloat(strName, defValue);
  404. }
  405. /// <summary>
  406. /// 获得当前页面客户端的IP
  407. /// </summary>
  408. /// <returns>当前页面客户端的IP</returns>
  409. public static string GetIP()
  410. {
  411. try
  412. {
  413. string result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
  414. if (string.IsNullOrEmpty(result))
  415. result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
  416. if (string.IsNullOrEmpty(result))
  417. result = HttpContext.Current.Request.UserHostAddress;
  418. if (string.IsNullOrEmpty(result) || !ValidateString.IsIP(result))
  419. return "127.0.0.1";
  420. return result;
  421. }
  422. catch
  423. {
  424. return "127.0.0.1";
  425. }
  426. }
  427. /// <summary>
  428. /// 获取URL地址的网页内容
  429. /// </summary>
  430. public class GetUrlText
  431. {
  432. /// <summary>
  433. /// Gets the text.
  434. /// </summary>
  435. /// <param name="url">地址 The URL.</param>
  436. /// <param name="Encoding">编码 The encoding.</param>
  437. /// <returns></returns>
  438. public static string GetText(string url, string Encoding)
  439. {
  440. WebResponse wr_result = null;
  441. var txthtml = new StringBuilder();
  442. try
  443. {
  444. WebRequest wr_req = WebRequest.Create(url);
  445. wr_result = wr_req.GetResponse();
  446. Stream ReceiveStream = wr_result.GetResponseStream();
  447. Encoding encode = System.Text.Encoding.GetEncoding(Encoding);
  448. var sr = new StreamReader(ReceiveStream, encode);
  449. if (true)
  450. {
  451. var read = new Char[256];
  452. int count = sr.Read(read, 0, 256);
  453. while (count > 0)
  454. {
  455. var str = new String(read, 0, count);
  456. txthtml.Append(str);
  457. count = sr.Read(read, 0, 256);
  458. }
  459. }
  460. }
  461. catch (Exception)
  462. {
  463. txthtml.Append("err");
  464. }
  465. finally
  466. {
  467. if (wr_result != null)
  468. {
  469. wr_result.Close();
  470. }
  471. }
  472. return txthtml.ToString();
  473. }
  474. public static string GetText(string HttpUrl)
  475. {
  476. try
  477. {
  478. HttpHelper http = new HttpHelper();
  479. HttpItem item = new HttpItem()
  480. {
  481. URL = HttpUrl,//URL 必需项
  482. Method = "get",//URL 可选项 默认为Get
  483. IsToLower = false,//得到的HTML代码是否转成小写 可选项默认转小写
  484. Cookie = "",//字符串Cookie 可选项
  485. Referer = "",//来源URL 可选项
  486. Postdata = "",//Post数据 可选项GET时不需要写
  487. Timeout = 100000,//连接超时时间 可选项默认为100000
  488. ReadWriteTimeout = 30000,//写入Post数据超时时间 可选项默认为30000
  489. ContentType = "text/html",//返回类型 可选项有默认值
  490. Allowautoredirect = false,//是否根据301跳转 可选项
  491. //CerPath = "d:\123.cer",//证书绝对路径 可选项不需要证书时可以不写这个参数
  492. //Connectionlimit = 1024,//最大连接数 可选项 默认为1024
  493. ProxyIp = "",//代理服务器ID 可选项 不需要代理 时可以不设置这三个参数
  494. //ProxyPwd = "123456",//代理服务器密码 可选项
  495. //ProxyUserName = "administrator",//代理服务器账户名 可选项
  496. };
  497. var result = http.GetHtml(item);
  498. string html = result.Html;
  499. return html;
  500. //var request = (HttpWebRequest)HttpWebRequest.Create(HttpUrl);
  501. //var response = (HttpWebResponse)request.GetResponse();
  502. //var strConfig = String.Empty;
  503. //using (var reader = new StreamReader(response.GetResponseStream()))
  504. //{
  505. // strConfig = reader.ReadToEnd();
  506. //}
  507. //return strConfig;
  508. }
  509. catch (Exception)
  510. {
  511. return "";
  512. }
  513. }
  514. }
  515. /// 转全角的函数(SBC case)
  516. ///
  517. ///任意字符串
  518. ///全角字符串
  519. ///
  520. ///全角空格为12288,半角空格为32
  521. ///其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248
  522. ///
  523. public static String ToSBC(String input)
  524. {
  525. // 半角转全角:
  526. char[] c = input.ToCharArray();
  527. for (int i = 0; i < c.Length; i++)
  528. {
  529. if (c[i] == 32)
  530. {
  531. c[i] = (char)12288;
  532. continue;
  533. }
  534. if (c[i] < 127)
  535. c[i] = (char)(c[i] + 65248);
  536. }
  537. return new String(c);
  538. }
  539. /**/
  540. // /
  541. // / 转半角的函数(DBC case)
  542. // /
  543. // /任意字符串
  544. // /半角字符串
  545. // /
  546. // /全角空格为12288,半角空格为32
  547. // /其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248
  548. // /
  549. public static String ToDBC(String input)
  550. {
  551. char[] c = input.ToCharArray();
  552. for (int i = 0; i < c.Length; i++)
  553. {
  554. if (c[i] == 12288)
  555. {
  556. c[i] = (char)32;
  557. continue;
  558. }
  559. if (c[i] > 65280 && c[i] < 65375)
  560. c[i] = (char)(c[i] - 65248);
  561. }
  562. return new String(c);
  563. }
  564. /// <summary>
  565. /// 去掉所有的非数字
  566. /// </summary>
  567. /// <param name="key"></param>
  568. /// <returns></returns>
  569. public static string RemoveNotNumber(string key)
  570. {
  571. return Regex.Replace(key, @"[^\d]*", "");
  572. }
  573. /// <summary>
  574. /// 去掉所有的数字
  575. /// </summary>
  576. /// <param name="key"></param>
  577. /// <returns></returns>
  578. public static string RemoveNumber(string key)
  579. {
  580. return Regex.Replace(key, @"\d", "");
  581. }
  582. }
  583. }