HttpOperater
生活随笔
收集整理的這篇文章主要介紹了
HttpOperater
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
using System;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;namespace Whir.Software.DocumentDownLoader.Library
{/// <summary>/// 模擬HTTP操作/// </summary>public class HttpOperater{/// <summary>/// 發起Http請求/// </summary>/// <param name="httpRequestType">請求方式</param>/// <param name="url">請求地址</param>/// <param name="cookieInput">請求時傳入的cookie</param>/// <param name="cookieOutput">服務器返回的cookie</param>/// <param name="postData">發送數據</param>/// <returns></returns>public static string DoRequest(HttpRequestType httpRequestType, string url, string cookieInput, ref string cookieOutput, string postData){string response;try{const string windowsUserName = "";const string windowsPwd = "";const string userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36";const string accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";const string acceptLanguage = "zh-CN,zh;q=0.8";const string acceptEncoding = "gzip,deflate,sdch";CookieContainer cookieContainer = GetCookie(url, cookieInput);var newUri = new Uri(url);var request = (HttpWebRequest)WebRequest.Create(newUri);request.PreAuthenticate = true;if (windowsUserName.Length > 0 & windowsPwd.Length > 0){request.Credentials = new NetworkCredential(windowsUserName.Trim(), windowsPwd.Trim());}request.Timeout = 20000;request.CookieContainer = cookieContainer;request.UserAgent = userAgent;request.Accept = accept;request.Headers["Accept-Language"] = acceptLanguage;request.Headers["Accept-Charset"] = acceptEncoding;request.Headers["Accept-Encoding"] = acceptEncoding;request.Referer = newUri.AbsoluteUri;request.Method = httpRequestType == HttpRequestType.GET ? "GET" : "POST";if (request.Method == "POST"){request.ContentType = "application/x-www-form-urlencoded";byte[] bytes = Encoding.UTF8.GetBytes(postData);request.ContentLength = bytes.Length;using (Stream requestStream = request.GetRequestStream()){requestStream.Write(bytes, 0, bytes.Length);}}using (var wr = (HttpWebResponse)request.GetResponse()){response = new StreamReader(wr.GetResponseStream(), Encoding.GetEncoding("utf-8")).ReadToEnd();}CookieCollection cookies = cookieContainer.GetCookies(newUri);cookieOutput = CookieTostr(cookies);}catch (NotSupportedException exception){response = exception.Message;}catch (InvalidOperationException exception){response = exception.Message;}catch (IOException exception){response = exception.Message;}catch (Exception exception){response = exception.Message;}return response;}/// <summary>/// 設置cookie域/// </summary>/// <param name="url">請求地址</param>/// <param name="cookieInput">cookie</param>/// <returns></returns>private static CookieContainer GetCookie(string url, string cookieInput){var cookieContainer = new CookieContainer();var cookies = new CookieCollection();string[] cookiesArr = cookieInput.Split(';');foreach (string s in cookiesArr){string[] keyValuePair = s.Split('=');if (keyValuePair.Length > 1){var cookie = new Cookie{Name = keyValuePair[0].Trim(),Value = keyValuePair[1].Trim(),Domain = GetDomain(url).Trim()//設置cookie域};cookies.Add(cookie);}}cookieContainer.Add(cookies);return cookieContainer;}/// <summary>/// 通過Url取得域/// </summary>/// <param name="url"></param>/// <returns></returns>private static string GetDomain(string url){var regex = new Regex("(?i)http[s]*://(?<domain>[\\w|.]*)",RegexOptions.CultureInvariant | RegexOptions.Compiled);return regex.Match(url).Groups["domain"].Value;}/// <summary>/// 將cookie轉為字符串/// </summary>/// <param name="cookies"></param>/// <returns></returns>private static string CookieTostr(CookieCollection cookies){return cookies.Cast<Cookie>().Aggregate(string.Empty, (current, c) => current + (c.Name + "=" + c.Value + ";"));}}/// <summary>/// HTTP請求方式/// </summary>public enum HttpRequestType{/// <summary>/// GET/// </summary>GET = 1,/// <summary>/// POST/// </summary>POST = 2}
}
注:使用時,ref string cookiesOutput參數是服務器返回的Cookie,需保存用于下次請求。
轉載于:https://www.cnblogs.com/zhangqs008/p/3618414.html
總結
以上是生活随笔為你收集整理的HttpOperater的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [LeetCode] Single Nu
- 下一篇: C#项目代码规范