暫無描述

RequestString.cs 23KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645
  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. /// 获取文件
  34. /// </summary>
  35. /// <returns></returns>
  36. public static HttpFileCollection GetFiles()
  37. {
  38. return HttpContext.Current.Request.Files;
  39. }
  40. /// <summary>
  41. /// 返回URL中结尾的文件名
  42. /// </summary>
  43. public static string GetFilename(string url)
  44. {
  45. if (url == null)
  46. {
  47. return "";
  48. }
  49. string[] strs1 = url.Split(new[] { '/' });
  50. return strs1[strs1.Length - 1].Split(new[] { '?' })[0];
  51. }
  52. /// <summary>
  53. /// 返回指定的服务器变量信息
  54. /// </summary>
  55. /// <param name="strName">服务器变量名</param>
  56. /// <returns>服务器变量信息</returns>
  57. public static string GetServerString(string strName)
  58. {
  59. if (HttpContext.Current.Request.ServerVariables[strName] == null)
  60. return "";
  61. return HttpContext.Current.Request.ServerVariables[strName];
  62. }
  63. /// <summary>
  64. /// 返回上一个页面的地址
  65. /// </summary>
  66. /// <returns>上一个页面的地址</returns>
  67. public static string GetUrlReferrer()
  68. {
  69. string retVal = null;
  70. try
  71. {
  72. if (HttpContext.Current.Request.UrlReferrer != null)
  73. retVal = HttpContext.Current.Request.UrlReferrer.ToString();
  74. }
  75. catch (Exception)
  76. { }
  77. if (retVal == null)
  78. return "";
  79. return retVal;
  80. }
  81. /// <summary>
  82. /// 得到当前完整主机头
  83. /// </summary>
  84. /// <returns></returns>
  85. public static string GetCurrentFullHost()
  86. {
  87. HttpRequest request = HttpContext.Current.Request;
  88. if (!request.Url.IsDefaultPort)
  89. return string.Format("{0}:{1}", request.Url.Host, request.Url.Port.ToString(CultureInfo.InvariantCulture));
  90. return request.Url.Host;
  91. }
  92. /// <summary>
  93. /// 得到主机头
  94. /// </summary>
  95. /// <returns></returns>
  96. public static string GetHost()
  97. {
  98. return HttpContext.Current.Request.Url.Host;
  99. }
  100. /// <summary>
  101. /// 得到主机名
  102. /// </summary>
  103. public static string GetDnsSafeHost()
  104. {
  105. return HttpContext.Current.Request.Url.DnsSafeHost;
  106. }
  107. /// <summary>
  108. /// 获取当前请求的原始 URL(URL 中域信息之后的部分,包括查询字符串(如果存在))
  109. /// </summary>
  110. /// <returns>原始 URL</returns>
  111. public static string GetRawUrl()
  112. {
  113. return HttpContext.Current.Request.RawUrl;
  114. }
  115. /// <summary>
  116. /// 判断当前访问是否来自浏览器软件
  117. /// </summary>
  118. /// <returns>当前访问是否来自浏览器软件</returns>
  119. public static bool IsBrowserGet()
  120. {
  121. string[] BrowserName = { "ie", "opera", "netscape", "mozilla", "konqueror", "firefox" };
  122. string curBrowser = HttpContext.Current.Request.Browser.Type.ToLower();
  123. return BrowserName.Any(t => curBrowser.IndexOf(t, StringComparison.Ordinal) >= 0);
  124. }
  125. /// <summary>
  126. /// 判断是否来自搜索引擎链接
  127. /// </summary>
  128. /// <returns>是否来自搜索引擎链接</returns>
  129. public static bool IsSearchEnginesGet()
  130. {
  131. if (HttpContext.Current.Request.UrlReferrer == null)
  132. return false;
  133. string[] SearchEngine = { "google", "yahoo", "msn", "baidu", "sogou", "sohu", "sina", "163", "lycos", "tom", "yisou", "iask", "soso", "gougou", "zhongsou" };
  134. string tmpReferrer = HttpContext.Current.Request.UrlReferrer.ToString().ToLower();
  135. return SearchEngine.Any(t => tmpReferrer.IndexOf(t, StringComparison.Ordinal) >= 0);
  136. }
  137. /// <summary>
  138. /// 获得当前完整Url地址
  139. /// </summary>
  140. /// <returns>当前完整Url地址</returns>
  141. public static string GetUrl()
  142. {
  143. return HttpContext.Current.Request.Url.ToString();
  144. }
  145. /// <summary>
  146. /// 获取文件
  147. /// </summary>
  148. /// <param name="strName"></param>
  149. /// <returns></returns>
  150. public static HttpPostedFile GetFile(string strName)
  151. {
  152. return HttpContext.Current.Request.Files[strName];
  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. string result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
  412. if (string.IsNullOrEmpty(result))
  413. result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
  414. if (string.IsNullOrEmpty(result))
  415. result = HttpContext.Current.Request.UserHostAddress;
  416. if (string.IsNullOrEmpty(result) || !ValidateString.IsIP(result))
  417. return "127.0.0.1";
  418. return result;
  419. }
  420. /// <summary>
  421. /// 获取URL地址的网页内容
  422. /// </summary>
  423. public class GetUrlText
  424. {
  425. /// <summary>
  426. /// Gets the text.
  427. /// </summary>
  428. /// <param name="url">地址 The URL.</param>
  429. /// <param name="Encoding">编码 The encoding.</param>
  430. /// <returns></returns>
  431. public static string GetText(string url, string Encoding)
  432. {
  433. WebResponse wr_result = null;
  434. var txthtml = new StringBuilder();
  435. try
  436. {
  437. WebRequest wr_req = WebRequest.Create(url);
  438. wr_result = wr_req.GetResponse();
  439. Stream ReceiveStream = wr_result.GetResponseStream();
  440. Encoding encode = System.Text.Encoding.GetEncoding(Encoding);
  441. var sr = new StreamReader(ReceiveStream, encode);
  442. if (true)
  443. {
  444. var read = new Char[256];
  445. int count = sr.Read(read, 0, 256);
  446. while (count > 0)
  447. {
  448. var str = new String(read, 0, count);
  449. txthtml.Append(str);
  450. count = sr.Read(read, 0, 256);
  451. }
  452. }
  453. }
  454. catch (Exception)
  455. {
  456. txthtml.Append("err");
  457. }
  458. finally
  459. {
  460. if (wr_result != null)
  461. {
  462. wr_result.Close();
  463. }
  464. }
  465. return txthtml.ToString();
  466. }
  467. public static string GetText(string HttpUrl)
  468. {
  469. try
  470. {
  471. HttpHelper http = new HttpHelper();
  472. HttpItem item = new HttpItem()
  473. {
  474. URL = HttpUrl,//URL 必需项
  475. Method = "get",//URL 可选项 默认为Get
  476. IsToLower = false,//得到的HTML代码是否转成小写 可选项默认转小写
  477. Cookie = "",//字符串Cookie 可选项
  478. Referer = "",//来源URL 可选项
  479. Postdata = "",//Post数据 可选项GET时不需要写
  480. Timeout = 100000,//连接超时时间 可选项默认为100000
  481. ReadWriteTimeout = 30000,//写入Post数据超时时间 可选项默认为30000
  482. ContentType = "text/html",//返回类型 可选项有默认值
  483. Allowautoredirect = false,//是否根据301跳转 可选项
  484. //CerPath = "d:\123.cer",//证书绝对路径 可选项不需要证书时可以不写这个参数
  485. //Connectionlimit = 1024,//最大连接数 可选项 默认为1024
  486. ProxyIp = "",//代理服务器ID 可选项 不需要代理 时可以不设置这三个参数
  487. //ProxyPwd = "123456",//代理服务器密码 可选项
  488. //ProxyUserName = "administrator",//代理服务器账户名 可选项
  489. };
  490. var result = http.GetHtml(item);
  491. string html = result.Html;
  492. return html;
  493. //var request = (HttpWebRequest)HttpWebRequest.Create(HttpUrl);
  494. //var response = (HttpWebResponse)request.GetResponse();
  495. //var strConfig = String.Empty;
  496. //using (var reader = new StreamReader(response.GetResponseStream()))
  497. //{
  498. // strConfig = reader.ReadToEnd();
  499. //}
  500. //return strConfig;
  501. }
  502. catch (Exception)
  503. {
  504. return "";
  505. }
  506. }
  507. }
  508. /// 转全角的函数(SBC case)
  509. ///
  510. ///任意字符串
  511. ///全角字符串
  512. ///
  513. ///全角空格为12288,半角空格为32
  514. ///其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248
  515. ///
  516. public static String ToSBC(String input)
  517. {
  518. // 半角转全角:
  519. char[] c = input.ToCharArray();
  520. for (int i = 0; i < c.Length; i++)
  521. {
  522. if (c[i] == 32)
  523. {
  524. c[i] = (char)12288;
  525. continue;
  526. }
  527. if (c[i] < 127)
  528. c[i] = (char)(c[i] + 65248);
  529. }
  530. return new String(c);
  531. }
  532. /**/
  533. // /
  534. // / 转半角的函数(DBC case)
  535. // /
  536. // /任意字符串
  537. // /半角字符串
  538. // /
  539. // /全角空格为12288,半角空格为32
  540. // /其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248
  541. // /
  542. public static String ToDBC(String input)
  543. {
  544. char[] c = input.ToCharArray();
  545. for (int i = 0; i < c.Length; i++)
  546. {
  547. if (c[i] == 12288)
  548. {
  549. c[i] = (char)32;
  550. continue;
  551. }
  552. if (c[i] > 65280 && c[i] < 65375)
  553. c[i] = (char)(c[i] - 65248);
  554. }
  555. return new String(c);
  556. }
  557. /// <summary>
  558. /// 去掉所有的非数字
  559. /// </summary>
  560. /// <param name="key"></param>
  561. /// <returns></returns>
  562. public static string RemoveNotNumber(string key)
  563. {
  564. return Regex.Replace(key, @"[^\d]*", "");
  565. }
  566. /// <summary>
  567. /// 去掉所有的数字
  568. /// </summary>
  569. /// <param name="key"></param>
  570. /// <returns></returns>
  571. public static string RemoveNumber(string key)
  572. {
  573. return Regex.Replace(key, @"\d", "");
  574. }
  575. }
  576. }