c#远程html数据抓取实例分享

时间:2023-07-03 12:50:49 


/// <summary>
        /// 获取远程html
        /// </summary>
        /// <param name="url"></param>
        /// <param name="methed"></param>
        /// <param name="param"></param>
        /// <param name="html"></param>
        /// <returns></returns>
        public static bool GetHttp(string url, string methed, string param, out string html)
        {
            methed = methed.ToLower();

            if (param != null && methed == "get" && param.Length > 0)
            {
                url += "?" + param;
            }

            try
            {
                MSXML2.XMLHTTP mx = new MSXML2.XMLHTTPClass();

                mx.open(methed, url, false, null, null);

                if (param != null && methed == "post" && param.Length > 0)
                {
                    mx.setRequestHeader("Content-Length", param.Length.ToString());
                    mx.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
                }

                mx.send(param);

                if (mx.readyState != 4)
                {
                    html = "远程连接失败:-4";
                    return false;
                }
                html = mx.responseText;
                return true;
            }
            catch (Exception ex)
            {
                html = "远程连接失败:"+ex.Message;
                return false;
            }
        }

        public static bool GetHttp1(string url, string methed, string param, string referer, string encode, out string html)
        {
            //return GetHttp(url,methed,param,out html);

            //string encode = "utf-8";
            //string methed = sendType.ToString();

            if (param != null && methed == "get" && param.Length > 0)
            {
                if (url.IndexOf("?") >= 0)
                {
                    url += "&" + param;
                }
                else
                {
                    url += "?" + param;
                }
            }

            try
            {
                HttpWebRequest webreq = (HttpWebRequest)WebRequest.Create(url);

                webreq.Proxy=null;
                webreq.Timeout = 1000 * 6;
                webreq.ContentType = "application/x-www-form-urlencoded";
                webreq.UserAgent = "User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0";

                //webreq.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)";

                //谷歌的:User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36
                //火狐的:User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0
                //标准格式为: 浏览器标识 (操作系统标识; 加密等级标识; 浏览器语言) 渲染引擎标识 版本信息

                //webreq.AllowAutoRedirect = false;

                //频繁请求一个网址时,过段时间就会出现“基础连接已经关闭”
                //webreq.KeepAlive = false;
                //webreq.ProtocolVersion = HttpVersion.Version10;

                if (referer.Length > 0)
                {
                    webreq.Referer = referer;
                }

                CookieContainer mycookies = new CookieContainer();
                webreq.CookieContainer = mycookies;

                //if (this.cookieList != null)
                //{
                //    webreq.CookieContainer.Add(this.GetCookies(webreq.RequestUri, this.cookieList));
                //}

                webreq.Method = methed;

                //post 开始
                if (param != null && methed == "post")
                {
                    byte[] arrbyte = Encoding.GetEncoding(encode).GetBytes(param);
                    webreq.ContentLength = arrbyte.Length;

                    Stream newStream = webreq.GetRequestStream();
                    newStream.Write(arrbyte, 0, arrbyte.Length);
                    newStream.Close();
                }
                //post 结束

 
                WebResponse w = webreq.GetResponse();

                //返回HTML
                using (HttpWebResponse webres = (HttpWebResponse)webreq.GetResponse())
                {
                    using (Stream dataStream = webres.GetResponseStream())
                    {
                        using (StreamReader reader = new StreamReader(dataStream, Encoding.GetEncoding(encode)))
                        {
                            html = reader.ReadToEnd();
                            //this.cookieList = webreq.CookieContainer.GetCookies(webreq.RequestUri);
                            webreq.Abort();//可能会解决卡住或阻塞问题
                        }
                    }
                }
            }
            catch (Exception ex)
            {

                html = "出现异常(HttpHelper.GetHTML),远程连接失败:" + ex.Message + " url:" + url;
                //System.Windows.Forms.MessageBox.Show(html);
                return false;
            }

            return true;
        }

标签:c#远,程html,数据抓取
0
投稿

猜你喜欢

  • Android自定义View实现验证码

    2021-11-08 01:13:31
  • C#实现对数组进行随机排序类实例

    2023-06-22 19:04:26
  • Android图像处理之绘制圆形、三角形及扇形的头像

    2022-10-13 14:01:48
  • C#实现动态创建接口并调用的实例

    2021-11-12 16:38:17
  • Java中clone方法使用笔记

    2023-03-26 07:44:38
  • Android中AlertDilog显示简单和复杂列表的方法

    2022-11-22 16:32:35
  • feignclient https 接口调用报证书错误的解决方案

    2021-08-20 18:35:55
  • Android8.0适配前台定位服务service的示例代码

    2021-05-25 17:18:36
  • SpringSecurity rememberme功能实现过程解析

    2021-12-20 05:22:08
  • Android zygote启动流程详解

    2023-09-13 07:44:12
  • 如何将Mybatis连接到ClickHouse

    2023-11-06 02:35:51
  • Kotlin协程Dispatchers原理示例详解

    2022-09-26 00:09:45
  • java 字符串截取的三种方法(推荐)

    2021-05-24 06:49:52
  • 一文带你彻底理解Java序列化和反序列化

    2021-12-23 05:24:12
  • java实现文件拷贝的七种方式

    2023-07-20 19:01:41
  • 详解Java的JDBC API中事务的提交和回滚

    2021-07-23 15:19:54
  • 详解spring cloud eureka注册中心

    2023-11-10 17:54:10
  • Java使用备忘录模式实现过关类游戏功能详解

    2022-11-30 08:52:51
  • SpringCloud超详细讲解负载均衡组件Ribbon源码

    2021-06-17 18:39:47
  • Android中TimePicker与DatePicker时间日期选择组件的使用实例

    2023-08-07 01:35:15
  • asp之家 软件编程 m.aspxhome.com