`
380071587
  • 浏览: 447524 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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,需保存用于下次请求。



分享到:
评论

相关推荐

    node-v11.8.0-linux-arm64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    C语言期末大作业之图书信息管理系统实现-基于Dev-C++实现.zip

    c语言期末大作业 C语言期末大作业之图书信息管理系统实现_基于Dev-C++实现

    node-v8.16.2-sunos-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    爬虫selenium需求geckodriver

    爬虫selenium最新版本缺少的,快速拿去使用。

    毕业设计基于 YOLOv8 和 LPRNet 的车牌识别系统python源码+模型.zip

    1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 3、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。

    node-v9.6.1-sunos-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v10.18.0-linux-armv7l.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于matlab实现的K均值聚类的图像分割,灰度图像分割案例,真彩图像分割案例.rar

    基于matlab实现的K均值聚类的图像分割,灰度图像分割案例,真彩图像分割案例.rar

    基于RFID固定资产管理系统设计与实现毕业论文(28页).docx

    基于RFID固定资产管理系统设计与实现毕业论文(28页).docx

    瓦尔特弗兰德张力计WF-TC系列说明书 WF-TC皮带张力测量仪

    瓦尔特弗兰德张力计WF-TC系列说明书

    分地区按行业分城镇非私营单位就业人员平均工资(2022年).xls

    数据来源:中国人口与就业统计NJ-2023版

    数据更新至2020年分地区新增发电装机容量(太阳能发电).xls

    数据来源:中国电力统计NJ-2021版

    (更新至2022年)全国镇分年龄、性别的人口数.xls

    数据来源:中国人口与就业统计NJ-2023版

    node-v8.8.1-sunos-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v10.18.1-linux-armv7l.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    数据更新至2020年分地区单机6000千瓦及以上 火力发电机组分类情况(20至不足30万千瓦).xls

    数据来源:中国电力统计NJ-2021版

    数据更新至2020年电网建设 累计新增能力.xls

    数据来源:中国电力统计NJ-2021版

    TCN-02N-KT32S系列 普通开关型 使用说明书

    TCN-02N-KT32S系列 普通开关型 使用说明书

    毕业论文-基于JSP的个人通讯录管理系统设计与实现.docx

    毕业论文-基于JSP的个人通讯录管理系统设计与实现.docx

    SIMATIC-WinCC-Runtime-Professional-V19安装包-链接地址.txt

    SIMATIC_WinCC_Runtime_Professional_V19安装包_链接地址

Global site tag (gtag.js) - Google Analytics