HttpUtil.cs 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Net;
  5. using System.Net.Cache;
  6. using System.Net.Security;
  7. using System.Reflection;
  8. using System.Runtime.InteropServices;
  9. using System.Security;
  10. using System.Text;
  11. using System.Text.RegularExpressions;
  12. namespace IPADDemo.Util
  13. {
  14. class HttpUtil
  15. {
  16. }
  17. public class Http_Helper
  18. {
  19. public Http_Helper()
  20. {
  21. System.Net.ServicePointManager.DefaultConnectionLimit = 1024;
  22. }
  23. public CookieContainer CookieContainers = new CookieContainer();
  24. public string IE7 = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET4.0C; .NET4.0E)";
  25. public string IE8 = "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0)";
  26. private RequestCachePolicy rcp = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore);
  27. public bool isUserAgentSet = false;
  28. public string Cookies { get; set; }
  29. [DllImport("wininet.dll", CharSet = CharSet.Auto)]
  30. public static extern bool DeleteUrlCacheEntry(string lpszUrlName);
  31. [SecurityCritical, SuppressUnmanagedCodeSecurity]
  32. [DllImport("wininet.dll", CharSet = CharSet.Unicode, ExactSpelling = true, SetLastError = true)]
  33. internal static extern bool InternetGetCookieExW([In] string Url, [In] string cookieName, [Out] StringBuilder cookieData, [In] [Out] ref uint pchCookieData, uint flags, IntPtr reserved);
  34. public HttpStatusCode GetResponse(ref string pResponsetext, string pUrl, string pMethod, string pData, string pReferer, int pTime = 10000, string pEncoding = "UTF-8", bool pIsPTHander = true)
  35. {
  36. Set_Cookies(pUrl);
  37. try
  38. {
  39. DeleteUrlCacheEntry(pUrl);
  40. HttpWebRequest pRequest = (HttpWebRequest)WebRequest.Create(pUrl);
  41. pRequest.KeepAlive = true;
  42. pRequest.Method = pMethod.ToUpper();
  43. pRequest.AllowAutoRedirect = true;
  44. pRequest.CookieContainer = CookieContainers;
  45. pRequest.Referer = pReferer;
  46. pRequest.UserAgent = IE8;
  47. pRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
  48. pRequest.Timeout = pTime;
  49. pRequest.ReadWriteTimeout = pTime;
  50. pRequest.CachePolicy = rcp;
  51. pRequest.Headers.Add("x-requested-with", "XMLHttpRequest");
  52. //ProtocolVersion
  53. //KeepAlive
  54. //Allowautoredirect
  55. pRequest.ProtocolVersion = HttpVersion.Version10;
  56. pRequest.KeepAlive = false;
  57. if (pIsPTHander)
  58. {
  59. PTRequest(ref pRequest);
  60. }
  61. Encoding encoding = Encoding.GetEncoding(pEncoding);
  62. if (pMethod.ToUpper() != "GET" && pData != null)
  63. {
  64. byte[] bytes = encoding.GetBytes(pData);
  65. pRequest.ContentLength = (long)bytes.Length;
  66. pRequest.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
  67. Stream requestStream = pRequest.GetRequestStream();
  68. requestStream.Write(bytes, 0, bytes.Length);
  69. requestStream.Close();
  70. }
  71. HttpWebResponse httpWebResponse = (HttpWebResponse)pRequest.GetResponse();
  72. StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream(), encoding);
  73. pResponsetext = streamReader.ReadToEnd();
  74. pRequest.Abort();
  75. httpWebResponse.Close();
  76. return httpWebResponse.StatusCode;
  77. }
  78. catch (WebException ex)
  79. {
  80. try
  81. {
  82. HttpWebResponse response = (HttpWebResponse)ex.Response;
  83. if (response.StatusCode == HttpStatusCode.BadRequest)
  84. {
  85. using (Stream data = response.GetResponseStream())
  86. {
  87. using (StreamReader reader = new StreamReader(data))
  88. {
  89. string text = reader.ReadToEnd();
  90. pResponsetext = text;
  91. Console.WriteLine(text);
  92. }
  93. }
  94. }
  95. }
  96. catch
  97. {
  98. return HttpStatusCode.ExpectationFailed;
  99. }
  100. return HttpStatusCode.ExpectationFailed;
  101. }
  102. }
  103. public HttpStatusCode GetResponse_WX(ref string pResponsetext, string pUrl, string pMethod, string pData, string pReferer, int pTime = 10000, string pEncoding = "UTF-8", bool pIsPTHander = true)
  104. {
  105. Set_Cookies(pUrl);
  106. try
  107. {
  108. DeleteUrlCacheEntry(pUrl);
  109. HttpWebRequest pRequest = (HttpWebRequest)WebRequest.Create(pUrl);
  110. pRequest.KeepAlive = true;
  111. pRequest.Method = pMethod.ToUpper();
  112. pRequest.AllowAutoRedirect = true;
  113. pRequest.CookieContainer = CookieContainers;
  114. pRequest.Referer = pReferer;
  115. pRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 MicroMessenger/6.5.2.501 NetType/WIFI WindowsWechat QBCore/3.43.556.400 QQBrowser/9.0.2524.400";
  116. pRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
  117. pRequest.Timeout = pTime;
  118. pRequest.ReadWriteTimeout = pTime;
  119. pRequest.CachePolicy = rcp;
  120. pRequest.Headers.Add("x-requested-with", "XMLHttpRequest");
  121. //ProtocolVersion
  122. //KeepAlive
  123. //Allowautoredirect
  124. pRequest.ProtocolVersion = HttpVersion.Version10;
  125. pRequest.KeepAlive = false;
  126. if (pIsPTHander)
  127. {
  128. PTRequest(ref pRequest);
  129. }
  130. Encoding encoding = Encoding.GetEncoding(pEncoding);
  131. if (pMethod.ToUpper() != "GET" && pData != null)
  132. {
  133. byte[] bytes = encoding.GetBytes(pData);
  134. pRequest.ContentLength = (long)bytes.Length;
  135. pRequest.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
  136. Stream requestStream = pRequest.GetRequestStream();
  137. requestStream.Write(bytes, 0, bytes.Length);
  138. requestStream.Close();
  139. }
  140. HttpWebResponse httpWebResponse = (HttpWebResponse)pRequest.GetResponse();
  141. StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream(), encoding);
  142. pResponsetext = streamReader.ReadToEnd();
  143. pRequest.Abort();
  144. httpWebResponse.Close();
  145. return httpWebResponse.StatusCode;
  146. }
  147. catch (WebException ex)
  148. {
  149. try
  150. {
  151. HttpWebResponse response = (HttpWebResponse)ex.Response;
  152. if (response.StatusCode == HttpStatusCode.BadRequest)
  153. {
  154. using (Stream data = response.GetResponseStream())
  155. {
  156. using (StreamReader reader = new StreamReader(data))
  157. {
  158. string text = reader.ReadToEnd();
  159. pResponsetext = text;
  160. Console.WriteLine(text);
  161. }
  162. }
  163. }
  164. }
  165. catch
  166. {
  167. return HttpStatusCode.ExpectationFailed;
  168. }
  169. return HttpStatusCode.ExpectationFailed;
  170. }
  171. }
  172. public HttpStatusCode GetResponse1(ref string pResponsetext, string pUrl, string pMethod, string pData, string pReferer, int pTime = 10000, string pEncoding = "UTF-8", bool pIsPTHander = true)
  173. {
  174. Set_Cookies(pUrl);
  175. try
  176. {
  177. DeleteUrlCacheEntry(pUrl);
  178. HttpWebRequest pRequest = (HttpWebRequest)WebRequest.Create(pUrl);
  179. pRequest.KeepAlive = true;
  180. pRequest.Method = pMethod.ToUpper();
  181. pRequest.AllowAutoRedirect = true;
  182. pRequest.CookieContainer = CookieContainers;
  183. pRequest.Referer = pReferer;
  184. pRequest.UserAgent = IE8;
  185. pRequest.Accept = "application/json, text/javascript, */*; q=0.01";
  186. pRequest.Timeout = pTime;
  187. pRequest.ReadWriteTimeout = pTime;
  188. pRequest.CachePolicy = rcp;
  189. pRequest.Headers.Add("x-requested-with", "XMLHttpRequest");
  190. pRequest.ProtocolVersion = HttpVersion.Version10;
  191. pRequest.KeepAlive = false;
  192. if (pIsPTHander)
  193. {
  194. PTRequest(ref pRequest);
  195. }
  196. Encoding encoding = Encoding.GetEncoding(pEncoding);
  197. if (pMethod.ToUpper() == "POST" && pData != null)
  198. {
  199. byte[] bytes = encoding.GetBytes(pData);
  200. pRequest.ContentLength = (long)bytes.Length;
  201. pRequest.ContentType = "application/json; charset=UTF-8";
  202. Stream requestStream = pRequest.GetRequestStream();
  203. requestStream.Write(bytes, 0, bytes.Length);
  204. requestStream.Close();
  205. }
  206. HttpWebResponse httpWebResponse = (HttpWebResponse)pRequest.GetResponse();
  207. StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream(), encoding);
  208. pResponsetext = streamReader.ReadToEnd();
  209. pRequest.Abort();
  210. httpWebResponse.Close();
  211. return httpWebResponse.StatusCode;
  212. }
  213. catch (WebException ex)
  214. {
  215. HttpWebResponse response = (HttpWebResponse)ex.Response;
  216. if (response.StatusCode == HttpStatusCode.BadRequest)
  217. {
  218. using (Stream data = response.GetResponseStream())
  219. {
  220. using (StreamReader reader = new StreamReader(data))
  221. {
  222. string text = reader.ReadToEnd();
  223. pResponsetext = text;
  224. Console.WriteLine(text);
  225. }
  226. }
  227. }
  228. return HttpStatusCode.ExpectationFailed;
  229. }
  230. }
  231. public HttpStatusCode GetResponse2(ref string pResponsetext, string pUrl, string pMethod, string pData, string pReferer, int pTime = 10000, string pEncoding = "UTF-8", bool pIsPTHander = true)
  232. {
  233. Set_Cookies(pUrl);
  234. try
  235. {
  236. DeleteUrlCacheEntry(pUrl);
  237. HttpWebRequest pRequest = (HttpWebRequest)WebRequest.Create(pUrl);
  238. pRequest.KeepAlive = true;
  239. pRequest.Method = pMethod.ToUpper();
  240. pRequest.AllowAutoRedirect = true;
  241. pRequest.CookieContainer = CookieContainers;
  242. pRequest.Referer = pReferer;
  243. pRequest.UserAgent = IE8;
  244. pRequest.Accept = "application/json, text/javascript, */*; q=0.01";
  245. pRequest.Timeout = pTime;
  246. pRequest.ReadWriteTimeout = pTime;
  247. pRequest.CachePolicy = rcp;
  248. pRequest.Headers.Add("x-requested-with", "XMLHttpRequest");
  249. pRequest.ProtocolVersion = HttpVersion.Version10;
  250. pRequest.KeepAlive = false;
  251. if (pIsPTHander)
  252. {
  253. PTRequest(ref pRequest);
  254. }
  255. Encoding encoding = Encoding.GetEncoding(pEncoding);
  256. if (pMethod.ToUpper() == "POST" && pData != null)
  257. {
  258. byte[] bytes = encoding.GetBytes(pData);
  259. pRequest.ContentLength = (long)bytes.Length;
  260. pRequest.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
  261. Stream requestStream = pRequest.GetRequestStream();
  262. requestStream.Write(bytes, 0, bytes.Length);
  263. requestStream.Close();
  264. }
  265. HttpWebResponse httpWebResponse = (HttpWebResponse)pRequest.GetResponse();
  266. StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream(), encoding);
  267. pResponsetext = streamReader.ReadToEnd();
  268. pRequest.Abort();
  269. httpWebResponse.Close();
  270. return httpWebResponse.StatusCode;
  271. }
  272. catch (WebException ex)
  273. {
  274. HttpWebResponse response = (HttpWebResponse)ex.Response;
  275. if (response.StatusCode == HttpStatusCode.BadRequest)
  276. {
  277. using (Stream data = response.GetResponseStream())
  278. {
  279. using (StreamReader reader = new StreamReader(data))
  280. {
  281. string text = reader.ReadToEnd();
  282. pResponsetext = text;
  283. Console.WriteLine(text);
  284. }
  285. }
  286. }
  287. return HttpStatusCode.ExpectationFailed;
  288. }
  289. }
  290. public HttpStatusCode GetResponse3(ref string pResponsetext, string pUrl, string pMethod, string pData, string pReferer, int pTime = 10000, string pEncoding = "UTF-8", bool pIsPTHander = true)
  291. {
  292. Set_Cookies(pUrl);
  293. try
  294. {
  295. DeleteUrlCacheEntry(pUrl);
  296. HttpWebRequest pRequest = (HttpWebRequest)WebRequest.Create(pUrl);
  297. pRequest.KeepAlive = true;
  298. pRequest.Method = pMethod.ToUpper();
  299. pRequest.AllowAutoRedirect = true;
  300. pRequest.CookieContainer = CookieContainers;
  301. pRequest.Referer = pReferer;
  302. pRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36";
  303. pRequest.Accept = "text/plain, */*; q=0.01";
  304. pRequest.Timeout = pTime;
  305. pRequest.ReadWriteTimeout = pTime;
  306. pRequest.CachePolicy = rcp;
  307. pRequest.Headers.Add("x-requested-with", "XMLHttpRequest");
  308. pRequest.ProtocolVersion = HttpVersion.Version10;
  309. pRequest.KeepAlive = false;
  310. if (pIsPTHander)
  311. {
  312. PTRequest(ref pRequest);
  313. }
  314. Encoding encoding = Encoding.GetEncoding(pEncoding);
  315. if (pMethod.ToUpper() != "GET" && pData != null)
  316. {
  317. byte[] bytes = encoding.GetBytes(pData);
  318. pRequest.ContentLength = (long)bytes.Length;
  319. pRequest.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
  320. Stream requestStream = pRequest.GetRequestStream();
  321. requestStream.Write(bytes, 0, bytes.Length);
  322. requestStream.Close();
  323. }
  324. HttpWebResponse httpWebResponse = (HttpWebResponse)pRequest.GetResponse();
  325. StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream(), encoding);
  326. pResponsetext = streamReader.ReadToEnd();
  327. pRequest.Abort();
  328. httpWebResponse.Close();
  329. return httpWebResponse.StatusCode;
  330. }
  331. catch (WebException ex)
  332. {
  333. HttpWebResponse response = (HttpWebResponse)ex.Response;
  334. if (response.StatusCode == HttpStatusCode.BadRequest)
  335. {
  336. using (Stream data = response.GetResponseStream())
  337. {
  338. using (StreamReader reader = new StreamReader(data))
  339. {
  340. string text = reader.ReadToEnd();
  341. pResponsetext = text;
  342. Console.WriteLine(text);
  343. }
  344. }
  345. }
  346. return HttpStatusCode.ExpectationFailed;
  347. }
  348. }
  349. public Stream GetResponseImage(string pUrl, string pReferer = "", string pMethod = "GET", string pData = "", int pTime = 6000, string pEncoding = "UTF-8", bool pIsPTHander = true)
  350. {
  351. Set_Cookies(pUrl);
  352. try
  353. {
  354. DeleteUrlCacheEntry(pUrl);
  355. HttpWebRequest pRequest = (HttpWebRequest)WebRequest.Create(pUrl);
  356. pRequest.KeepAlive = true;
  357. pRequest.Method = pMethod;
  358. pRequest.AllowAutoRedirect = true;
  359. pRequest.CookieContainer = CookieContainers;
  360. pRequest.Referer = pReferer;
  361. pRequest.UserAgent = IE8;
  362. pRequest.Accept = "*/*";
  363. pRequest.Timeout = pTime;
  364. pRequest.CachePolicy = rcp;
  365. pRequest.Headers.Add("x-requested-with", "XMLHttpRequest");
  366. pRequest.ProtocolVersion = HttpVersion.Version10;
  367. pRequest.KeepAlive = false;
  368. if (pIsPTHander)
  369. {
  370. PTRequest(ref pRequest);
  371. }
  372. Encoding encoding = Encoding.GetEncoding(pEncoding);
  373. if (pMethod.ToUpper() == "POST" && pData != null)
  374. {
  375. byte[] bytes = encoding.GetBytes(pData);
  376. pRequest.ContentLength = (long)bytes.Length;
  377. pRequest.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
  378. Stream requestStream = pRequest.GetRequestStream();
  379. requestStream.Write(bytes, 0, bytes.Length);
  380. requestStream.Close();
  381. }
  382. ServicePointManager.ServerCertificateValidationCallback += (RemoteCertificateValidationCallback)((se, cert, chain, sslerror) => true);
  383. return pRequest.GetResponse().GetResponseStream();
  384. }
  385. catch
  386. {
  387. return (Stream)null;
  388. }
  389. }
  390. /// <summary>
  391. /// 提取string Cookies
  392. /// </summary>
  393. /// <param name="pUrl"></param>
  394. /// <returns></returns>
  395. public string GetCookieInternal(string pUrl)
  396. {
  397. string result = "";
  398. uint num = 0u;
  399. string url = pUrl.ToString();
  400. uint flags = 8192u;
  401. if (InternetGetCookieExW(url, null, null, ref num, flags, IntPtr.Zero))
  402. {
  403. num += 1u;
  404. StringBuilder stringBuilder = new StringBuilder((int)num);
  405. if (InternetGetCookieExW(url, null, stringBuilder, ref num, flags, IntPtr.Zero))
  406. {
  407. result = stringBuilder.ToString();
  408. }
  409. }
  410. return result;
  411. }
  412. /// <summary>
  413. /// 提取string Cookies
  414. /// </summary>
  415. /// <param name="pUrl"></param>
  416. /// <param name="pCookie"></param>
  417. /// <returns></returns>
  418. public string GetHttpHelperCookieString(Uri pUrl, CookieCollection pCookie = null)
  419. {
  420. List<string> pList = new List<string>();
  421. if (pCookie == null)
  422. pCookie = CookieContainers.GetCookies(pUrl);
  423. foreach (Cookie cookie in pCookie)
  424. {
  425. string name = cookie.Name;
  426. string str = cookie.Value;
  427. pList.Add(name + "=" + str);
  428. }
  429. return string.Join("; ", pList);
  430. }
  431. /// <summary>
  432. /// 提取string Cookies
  433. /// </summary>
  434. /// <param name="pUrl"></param>
  435. /// <param name="pCookie"></param>
  436. /// <returns></returns>
  437. public string GetHttpHelperCookieString(string pUrl, CookieCollection pCookie = null)
  438. {
  439. List<string> pList = new List<string>();
  440. if (pCookie == null)
  441. pCookie = CookieContainers.GetCookies(new Uri(pUrl));
  442. foreach (Cookie cookie in pCookie)
  443. {
  444. string name = cookie.Name;
  445. string str = cookie.Value;
  446. pList.Add(name + "=" + str);
  447. }
  448. return string.Join("; ", pList);
  449. }
  450. public Dictionary<string, string> GetHttpHelperCookie(Uri pUrl)
  451. {
  452. Dictionary<string, string> dictionary = new Dictionary<string, string>();
  453. foreach (Cookie cookie in CookieContainers.GetCookies(pUrl))
  454. {
  455. string name = cookie.Name;
  456. string str = cookie.Value;
  457. dictionary[name] = str;
  458. }
  459. return dictionary;
  460. }
  461. /// <summary>
  462. /// 删除Heard
  463. /// </summary>
  464. /// <param name="pRequest"></param>
  465. public void PTRequest(ref HttpWebRequest pRequest)
  466. {
  467. pRequest.Headers.Remove("x-requested-with");
  468. }
  469. /// <summary>
  470. /// 枚举类型
  471. /// </summary>
  472. public enum InternetFlags
  473. {
  474. INTERNET_FLAG_RESTRICTED_ZONE = 16,
  475. INTERNET_COOKIE_HTTPONLY = 8192,
  476. INTERNET_COOKIE_THIRD_PARTY = 131072,
  477. }
  478. /// <summary>
  479. /// 设置COOKIES
  480. /// </summary>
  481. /// <param name="url"></param>
  482. public void Set_Cookies(string url)
  483. {
  484. if (Cookies != null)
  485. {
  486. string[] arrCookie = Cookies.Split(';');
  487. CookieContainer cookie_container = new CookieContainer(); //加载Cookie
  488. //cookie_container.SetCookies(new Uri(url), cookie);
  489. foreach (string sCookie in arrCookie)
  490. {
  491. if (sCookie.IndexOf("expires") > 0)
  492. continue;
  493. cookie_container.SetCookies(new Uri(url), sCookie);
  494. }
  495. CookieContainers = cookie_container;
  496. }
  497. }
  498. #region 正则提取Cookie
  499. public static string LiteCookies(string Cookies)
  500. {
  501. try
  502. {
  503. string rStr = "";
  504. Cookies = Cookies.Replace("HttpOnly", "").Replace(";", "; ");
  505. Regex r = new Regex("(?<=,|^)(?<cookie>[^ ]+=[\\s|\"]?(?![\"]?deleted[\"]?)[^;]+)[\"]?;");
  506. Match m = r.Match(Cookies);
  507. while (m.Success)
  508. {
  509. rStr = GetCleanCookie(rStr, m.Groups["cookie"].Value);
  510. m = m.NextMatch();
  511. }
  512. return rStr;
  513. }
  514. catch
  515. {
  516. return "";
  517. }
  518. }
  519. #endregion
  520. #region 获取一次请求中的无重复Cookie
  521. private static string GetCleanCookie(string source, string inStr)
  522. {
  523. if (source != "" && inStr != "")
  524. {
  525. bool changed = false;
  526. string[] tem = source.Split(';');
  527. for (int i = 0; i < tem.Length; i++)
  528. {
  529. if (tem[i].Split('=')[0] == inStr.Split('=')[0])
  530. {
  531. source = source.Replace(tem[i], inStr);
  532. changed = true;
  533. }
  534. }
  535. if (!changed) source += ";" + inStr;
  536. return source;
  537. }
  538. else if (inStr != "") return inStr;
  539. else if (source != "") return source;
  540. else return "";
  541. }
  542. #endregion
  543. #region 合并多次请求的Cookie,去掉重复部分
  544. public static string MergerCookies(string OldCookie, string NewCookie)
  545. {
  546. if (!string.IsNullOrEmpty(OldCookie) && !string.IsNullOrEmpty(NewCookie))
  547. {
  548. if (OldCookie == NewCookie) return OldCookie;
  549. else
  550. {
  551. List<string> Old = new List<String>(OldCookie.Split(';'));
  552. List<string> New = new List<String>(NewCookie.Split(';'));
  553. foreach (string n in New)
  554. {
  555. foreach (string o in Old)
  556. {
  557. if (o == n || o.Split('=')[0] == n.Split('=')[0])
  558. {
  559. Old.Remove(o);
  560. break;
  561. }
  562. }
  563. }
  564. List<string> list = new List<string>(Old);
  565. list.AddRange(New);
  566. return string.Join(";", list.ToArray());
  567. }
  568. }
  569. else if (!string.IsNullOrEmpty(OldCookie)) return OldCookie;
  570. else if (!string.IsNullOrEmpty(NewCookie)) return NewCookie;
  571. else return "";
  572. }
  573. #endregion
  574. public byte[] StreamToBytes(Stream stream)
  575. {
  576. byte[] bytes = new byte[stream.Length];
  577. stream.Read(bytes, 0, bytes.Length);
  578. // 设置当前流的位置为流的开始
  579. stream.Seek(0, SeekOrigin.Begin);
  580. return bytes;
  581. }
  582. }
  583. }