用C#代码 get请求获取网页响应代码,通过HttpWebRequest的GetResponse()方法报异常,我想获取这相应代码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用C#代码 get请求获取网页响应代码,通过HttpWebRequest的GetResponse()方法报异常,我想获取这相应代码相关的知识,希望对你有一定的参考价值。

如何实现呢?
是响应代码

我不知道你的代码是什么样的出了异常,给你一段代码供参考:
string sRet = "";
try

//目标网址事先存在字符串 sPage 中
HttpWebRequest Myrq = (HttpWebRequest)HttpWebRequest.Create(sPage );
Myrq.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; EmbeddedWB 14.52 from: http://www.bsalsa.com/ EmbeddedWB 14.52; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)";
Myrq.Accept = "*/*";
Myrq.Method = "GET";
Myrq.Headers.Add(HttpRequestHeader.AcceptLanguage, "zh-cn");
Myrq.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");
Myrq.KeepAlive = true;
//Myrq.Referer = xmlurlrefer;//有些网址要求指定referer
//有些网页需要cookie的
//Myrq.Headers.Add(HttpRequestHeader.Cookie, sCookie);

HttpWebResponse myrp = (HttpWebResponse)Myrq.GetResponse();
long totalBytes = myrp.ContentLength;
Encoding ec;
if (!string.IsNullOrEmpty(myrp.CharacterSet))

ec = Encoding.GetEncoding(myrp.CharacterSet);//如果响应的网页头有指定编码就用指定编码,否则采用默认的GB2312编码

else

ec = Encoding.GetEncoding("GB2312");

Stream st = myrp.GetResponseStream();
using (StreamReader sr = new StreamReader(st,ec ))

sRet = sr.ReadToEnd();

st.Close();
//Console.WriteLine(sRet);
return sRet;

catch (WebException ex)

Console.WriteLine(ex.ToString());
return sRet;
参考技术A

C# 实现模拟网页操作

我做的是winform程序,要在后台自动输入网站的用户名和密码,并登陆到主页面,然后抓取主页面部分的源代码,这些部分我已经完成,现在遇到个问题,在网页源文件中,有些是通过ajax请求输出的文字,在源文件中获取不到。如图

报价是通过ajax处理的。下图是他的ajax部分

,我通过webBrowser怎么去执行他的这个ajax,使得源代码中,有报价的内容呢?

参考技术A 首先尝试直接在Chrome浏览器打开下面的链接,前面的域名自己补完,后面的“57976156”是一个随机数字。
/maintain/interface/forindex/ashx?dealerid=100015266&type=4&number=57976156
如果能打开并获取到json文本数据的话,你就可以通过代码用HttpRequest的Get方法去获得这段数据。
得到数据后分析下数据,然后你想干嘛就干嘛吧
参考技术B 以前试过 好像没办法。ajax应该是等页面载入以后再执行。你可以循环解析源代码查看是否已经取得ajax部分的代码追问

这个应该不行的吧,我直接通过浏览器打开后,鼠标右击查看源文件,都是空的,现在就是取不到那个值,愁死了

追答

你通过浏览器打开那个页面(不是程序的webbrowers) 网页源代码里也是空的?

追问

webBrowser1控件获取的源代码也是空的。现在问题这样,我后台自动点击webBrowser1页面中的一个超链接,在webBrowser1控件中已经看到跳转成功,进入b页面,然后我抓取的源码怎么还是上一个链接中的呢?求解。是不是事件不对

追答

    你放一个按钮 试试 等页面完全加载完毕后再获取一下源代码试试 有没有ajax加载的部分

在webBrowser1_DocumentCompleted事件中加下面的代码
if (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
         return;
   string wbUrl = wb.Url.ToString();
   System.Windows.Forms.HtmlDocument document = this.webBrowser1.Document;
  if (e.Url.ToString() != wb.Url.ToString())
   
      return;//不断拒绝,只有URL是webbrowser1的navigate地址才接受
   

    本回答被提问者采纳

    以上是关于用C#代码 get请求获取网页响应代码,通过HttpWebRequest的GetResponse()方法报异常,我想获取这相应代码的主要内容,如果未能解决你的问题,请参考以下文章

    c#如何访问网页代码最快。。。

    C# HttpWebRequest 绝技 根据URL地址获取网页信息

    带有 file_get_contents 的 HTTP 请求,获取响应代码

    c#:如何使用 httpclient 发布异步请求并获取流?

    C# 实现模拟网页操作

    无法从使用 C# 的 API 获得 json 响应