zoukankan      html  css  js  c++  java
  • 在webForm中WebRequest\WebClient\WebBrowser获取远程页面源码的三种方式(downmoon)

      一个小需求,获取远程页面的源码,主要用于抓数据。原来用的好好的,最近突然不能获取页面源码了,但是仍然可以用浏览器正常浏览。(文后附源码下载。^_^)

      经过分析,原来用的代码如下:

    Code

     查了下资料,原来需要加参数。
           #region 关键参数,否则会取不到内容 Important Parameters,else get nothing.
                    httpWebRequest.UserAgent = "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)";
                    httpWebRequest.Accept = "*/*";
                    httpWebRequest.KeepAlive = true;
                    httpWebRequest.Headers.Add("Accept-Language", "zh-cn,en-us;q=0.5");

                    #endregion

    修正后的代码如下:

    Code

     问题是解决了,后来再想了想,可以用WebClient先把页面download到本地临时文件,再读取文本内容。

    代码如下:

    Code


    结果不能获取源码。错误如下:

     

     再想想,还有Webbrowser控件可以用啊。在WinFrom下只要在主线程前加[STAThread]即可。
     

    Code

     
    在WebForm就麻烦些了,出现错误,线程不在单线程单元中,故无法实例化 ActiveX 控件“8856f961-340a-11d0-a96b-00c04fd705a2” 



     代码如下:

    Code

     
    后来搜索N小时(N>=5)后,终于找到可行解决方案,在WebPage页面头部加入AspCompat="true"

    即<%@ Page Language="C#"  AspCompat="true" ******/>

    MSDN给出的解释是:
    在 ASP .NET 网页的 <%@Page> 标记中包含兼容性属性 aspcompat=true,如 <%@Page aspcompat=true Language=VB%>。使用此属性将强制网页以 STA 模式执行,从而确保您的组件可以继续正确运行。如果试图使用 STA 组件但没有指定此标记,运行时将会发生异常情况。

    将此属性的值设置为 true 时,将允许网页调用 COM+ 1.0 组件,该组件需要访问非管理的 ASP 内置对象。可以通过 ObjectContext 对象进行访问。

    如果将此标记的值设为 true,性能会稍微有些下降。建议只在确实需要时才这样做。


    终于可以了! 不知道有没有更好的方法??

     
    附:源码下载。

    邀月注:

    如果不能测试,请注意是否在域(AD)环境下,如果是! 请注意设置代理和防火墙
    请参考:
    http://dev.csdn.net/article/83914.shtm

    http://blog.csdn.net/downmoon/archive/2006/04/14/663337.aspx

    http://www.cnblogs.com/downmoon/archive/2007/12/29/1019701.html
    邀月注:本文版权由邀月和博客园共同所有,转载请注明出处。
    助人等于自助!  3w@live.cn
  • 相关阅读:
    挖地雷——线性dp
    hdu6376 度度熊剪纸条-----01背包
    Problem
    UVa 10635
    Vjudge_题目分享_A -> 线性Dp排列木棍 ( Dilworth定理应用
    洛谷日报 & 原来博客(转载)
    使用.net6 WebApplication打造最小API
    k8s笔记——NodePort暴露nginx-controller实现https自动跳转自定义nodePort端口
    通过Dapr实现一个简单的基于.net的微服务电商系统(十七)——服务保护之动态配置与热重载
    通过Dapr实现一个简单的基于.net的微服务电商系统(十六)——dapr+sentinel中间件实现服务保护
  • 原文地址:https://www.cnblogs.com/downmoon/p/1514519.html
Copyright © 2011-2022 走看看