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相关推荐

最新文章

  1. HTTP 错误 404.3 – Not Found 由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序...
  2. 为什么我们喜欢用 sigmoid 这类 S 型非线性变换?
  3. 【TypeScript】防止对象改变
  4. Stark 组件:快速开发神器 —— 自动生成 URL
  5. SAP Spartacus HTML Tags 实现介绍
  6. 数学--数论--HDU - 6395 Let us define a sequence as below 分段矩阵快速幂
  7. java ee开发环境_设置Java EE 6开发环境
  8. oracle两个约束,Oracle中的约束介绍(2)
  9. switch java 语法_Java_基础语法之switch语句
  10. linux vim文本编辑器
  11. 如何在mysql navicat 设置datetime类型的默认事件值
  12. window.dialogArguments与window.showModalDialog用法
  13. 三诺 n20g 微型计算机,就是要更完美 三诺N-20GIII提升巨大
  14. 辐射光电流测试软件,资深工程师告诉你如何使用示波器测试EMI辐射干扰
  15. C# Windows Service与Timer(计时器)
  16. C不会断句?【前后置,位,移位操作符详解】 b = ++c, c++, ++a, a++
  17. php内核邮件群发管理系统源码
  18. android 百度地图获取城市,Android 百度地图获取两点之间的距离和推荐的驾车路线...
  19. 野火洋桃STM32开发版学习指导完整版
  20. Bluetooth设备之间如何建立连接

热门文章

  1. CountDownLatch(线程计数器)
  2. echart 坐标数字间隔_用LaTeX优雅地绘制数字电路
  3. 用MATLAB编程正弦稳态相量图,matlab课程设计--利用MATLAB对线性电路正弦稳态特性分析...
  4. python的核心数据类型_Python核心数据类型-集合
  5. 循环结果添加到集合_Java Note-数据结构(4)集合
  6. 阅读器xodo_佐道Xodo——手机最佳pdf阅读器
  7. pythonos模块使用方法_python os模块使用方法
  8. 用shell获取mysql主从状态_shell监控MySQL主从状态脚本两则
  9. Spark Streaming(四)kafka搭建(单节点,单broker)
  10. 试用期没过,因在公司上了1024网站...