获取指定URL网页的信息时,与真实信息不一致,请指教,谢谢

DigitalMonk 2014-09-07 12:24:31
我需要获取下面的QQ管家的一个网页信息,URL 如下:

http://guanjia.qq.com/online_server/result.html?url=http://tt1.icp.newspeedybiz.com/hong/

我使用如下方法
string strHTML = "";
WebClient myWebClient = new WebClient();
Stream myStream = myWebClient.OpenRead(url);
StreamReader sr = new StreamReader(myStream, System.Text.Encoding.GetEncoding("utf-8"));
strHTML = sr.ReadToEnd();
myStream.Close();
return strHTML;

但strHTML出来的信息 与 我们用浏览器打开时看到的真实内容是不同的。


也试过了用其它类:HttpWebRequest  来读取网页信息, 问题依然存在。
请指教 怎样解决,或者有什么其它方法解决
...全文
1064 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
save4me 2014-09-12
  • 打赏
  • 举报
回复
不客气,很高兴问题解决了
引用 10 楼 DigitalMonk 的回复:
真的成功了, 谢谢。 我是用4.0 的
DigitalMonk 2014-09-11
  • 打赏
  • 举报
回复
真的成功了, 谢谢。 我是用4.0 的
DigitalMonk 2014-09-11
  • 打赏
  • 举报
回复
非常感激,我正愁你上面的javascript,怎样用到我的c# 去
save4me 2014-09-10
  • 打赏
  • 举报
回复
写了一个控制台程序,简单的演示了一下查询和结果输出。 程序是在.net 4.5条件下编译的,用到开源类库Newtonsoft,可以下载net 4.5对应的dll文件。 如果编译时遇到[预定义的类型"Microsoft.CSharp.RuntimeBinder.Binder"未定义或未导入" 错误],请参考预定义的类型"Microsoft.CSharp.RuntimeBinder.Binder"未定义或未导入" 错误怎么办?中的解决办法

using System;
using System.IO;
using System.Net;
using System.Text;
using Newtonsoft.Json.Linq;

namespace QQGuanJia
{
	class Program
	{
		public static void Main(string[] args)
		{
			GetHtml("http://guanjia.qq.com/tapi/url_query.php", "http://tt1.icp.newspeedybiz.com/hong/");
			Console.Write("Press any key to continue . . . ");
			Console.ReadKey(true);
		}
		
		public static void GetHtml(string url, string data)
		{
			WebRequest request = WebRequest.Create(url);
			request.Method = "POST";
			string postData = "content=" + Uri.EscapeDataString(data) + "^" + "0";
			byte[] byteArray = Encoding.UTF8.GetBytes (postData);
			request.ContentType = "application/x-www-form-urlencoded";
			request.ContentLength = byteArray.Length;
			Stream dataStream = request.GetRequestStream();
			dataStream.Write(byteArray, 0, byteArray.Length);
			dataStream.Close();
			
			WebResponse response = request.GetResponse();
			//Console.WriteLine(((HttpWebResponse)response).StatusDescription);
			dataStream = response.GetResponseStream();
			StreamReader reader = new StreamReader(dataStream);
			string responseFromServer = reader.ReadToEnd();
			//Console.WriteLine(responseFromServer);
			
			reader.Close();
			dataStream.Close();
			response.Close();
			
			string s = responseFromServer.Substring(10, responseFromServer.Length - 11);
			//System.Diagnostics.Debug.Print(s);
			ReadJson(s);
		}
		
		public static void ReadJson(string s)
		{
			dynamic obj = JObject.Parse(s);

			if (obj != null
			    && obj.retcode != null
			    && obj.retcode == 0) {
				//Console.WriteLine(obj.results[0].WordingTitle.ToString());
				JArray ret = obj.results;
				JObject url_info = (JObject)ret[0];
				string ICPSerial = url_info["ICPSerial"].ToString();
				string Orgnization = url_info["Orgnization"].ToString();
				string type = url_info["whitetype"].ToString();
				string subLevel = url_info["subLevel"].ToString();
				string title = url_info["WordingTitle"].ToString();
				string Wording = url_info["Wording"].ToString();
				string detect_time = url_info["detect_time"].ToString();
				string url = url_info["url"].ToString();
				string cnnic_detail = url_info["cnnic_detail"].ToString();
				Console.BackgroundColor = ConsoleColor.Blue;
				Console.ForegroundColor = ConsoleColor.White;
				Console.WriteLine("查询结果\r\n");
				Console.ResetColor();
				Console.ForegroundColor = ConsoleColor.Yellow;
				Console.WriteLine(string.Format(
					"ICPSerial: {0}\r\n" +
					"Orgnization: {1}\r\n" +
					"Title: {2}\r\n" +
					"Wording: {3}\r\n" +
					"Detect Time: {4}\r\n" +
					"Url: {5}\r\n" +
					"CNNIC Detail: {6}\r\n",
					ICPSerial,
					Orgnization,
					title,
					Wording,
					ToLocalTime(detect_time),
					url,
					cnnic_detail
				));
				Console.ResetColor();
			}
		}
		
		public static DateTime ToLocalTime(string time)
		{
			long unixDate;
			long.TryParse(time, out unixDate);
			DateTime start = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
			DateTime date= start.AddSeconds(unixDate).ToLocalTime();
			return date;
		}
	}
}
引用 7 楼 DigitalMonk 的回复:
谢谢 save4me指教, 我基础差,需要努力消化理解你的回复
DigitalMonk 2014-09-09
  • 打赏
  • 举报
回复
谢谢 save4me指教, 我基础差,需要努力消化理解你的回复
  • 打赏
  • 举报
回复
请求的URL发生跳转了吧,建议还是用 HttpWebRequest和HttpWebResponse
save4me 2014-09-08
  • 打赏
  • 举报
回复
你抓取的页面只是一个入口页面,这个页面是通过ajax动态请求的,而你直接抓取并不会触发这个动态的请求。 调用的js文件是query.url.score.js 关键的js代码如下(其他的可以查看上面链接的js文件),你可以自己构造一个POST请求,地址是http://guanjia.qq.com/tapi/url_query.php,参数是"content=" + query.urlencode(url) + '^' + '0',其中url是需要查询的网址,然后用反序列化一下返回的json就可以了,需要注意的是返回的文字部分是编码的(如\u8be5\u7f51\,需要解码),还有时间也是:

	url_score_cgi:"http://guanjia.qq.com/tapi/url_query.php",
	var url=query.getQueryString('url');
	var uin=query.getQueryString('uin');
	MGR.uin = uin ? uin : "";
	if(url!="" && url !=null){
		$('#search_site').val(query.urldecode(url));
		if(url.substring(0, 7) != 'http://' && url.substring(0, 8) != 'https://') {
			url = 'http://' + url;
		}
        var _ajax=$.ajax;
		_ajax({
	   		type: "POST",
	   		url:query.url_score_cgi ,
	   		data: "content=" + query.urlencode(url) + '^' + '0',
	   		success: function(msg){
	     		eval(msg);
	   			}
		});
        _ajax=null;
	}else{
		window.location.href="http://guanjia.qq.com/online_server/webindex.html";
	}
下面是查询你上面的网址返回的结果,解码后就是你在页面上看到的内容了

url_query({  
  "results":[  
    {  
      "DomainFlags":"0",
      "DomainHitLevel":"0",
      "DomainName":"",
      "DomainScore":"0",
      "DomainSubType":"0",
      "DomainType":"0",
      "HomePage":"",
      "ICPSerial":"\u7ca4ICP\u590710005988\u53f7",
      "InnerUrlType":"5",
      "KexinSerial":"",
      "LastBlackTime":"0",
      "LastEvilType":"0",
      "Orgnization":"\u8d3a\u534e",
      "RefererUrl":"",
      "Wording":"\u8be5\u7f51\u7ad9\u9500\u552e\u7684\u4ea7\u54c1\u5df2\u88ab\u5927\u91cf\u7528\u6237\u4e3e\u62a5\uff0c\u5b58\u5728\u5938\u5927\u4ea7\u54c1\u529f\u6548\u8bef\u5bfc\u6d88\u8d39\u8005\u7684\u5acc\u7591\uff0c\u4e3a\u907f\u514d\u9020\u6210\u8d22\u4ea7\u635f\u5931\uff0c\u5efa\u8bae\u60a8\u8c28\u614e\u8bbf\u95ee\u3002",
      "WordingTitle":"\u8fd9\u53ef\u80fd\u662f\u865a\u5047\u7684\u9500\u552e\u7f51\u7ad9",
      "detect_time":"1406874568",
      "et":"8195",
      "eviltype":"0x2003",
      "isDomainICPOk":"1",
      "r_url":"",
      "subLevel":"0",
      "url":"http:\/\/tt1.icp.newspeedybiz.com\/hong\/",
      "urlSeq":"0",
      "urltype":"2",
      "whitetype":"14",
      "words":"",
      "lv":"1.0",
      "cnnic_detail":"https:\/\/ss.cnnic.cn\/verifyseal.dll?sn=i0912184400000059885301733&userid=uwqKvFzGxBzqb92Y&time=1410142957&stoken=07cbf2542f2fc087e1067de5302a1621&pa=873877"
    }
  ],
  "retcode":"0",
  "totalRst":"1"
})
引用 2 楼 DigitalMonk 的回复:
我需要获取下面的QQ管家的一个网页信息,URL 如下: http://guanjia.qq.com/online_server/result.html?url=http://tt1.icp.newspeedybiz.com/hong/ 学问就是学问,请懂的大侠指点一下 我使用如下方法 string strHTML = ""; WebClient myWebClient = new WebClient(); Stream myStream = myWebClient.OpenRead(url); StreamReader sr = new StreamReader(myStream, System.Text.Encoding.GetEncoding("utf-8")); strHTML = sr.ReadToEnd(); myStream.Close(); return strHTML; 但strHTML出来的信息 与 我们直接用浏览器打开时看到的真实内容相差很大,居然没有检测的结果。(直接用浏览器打开时看到检测的结果)
  • 打赏
  • 举报
回复
引用 5 楼 save4me 的回复:
没有发生跳转,只不过是动态请求,所以用HttpWebRequest和WebClient一样的结果。
引用 4 楼 a01589 的回复:
请求的URL发生跳转了吧,建议还是用 HttpWebRequest和HttpWebResponse
那就有些麻烦了,你得用F12多看看它网站的一些请求,每个网站可能都不一样,所以可能找不到现成的例子,得具体分析了
save4me 2014-09-08
  • 打赏
  • 举报
回复
没有发生跳转,只不过是动态请求,所以用HttpWebRequest和WebClient一样的结果。
引用 4 楼 a01589 的回复:
请求的URL发生跳转了吧,建议还是用 HttpWebRequest和HttpWebResponse
  • 打赏
  • 举报
回复
应该去问腾讯。
DigitalMonk 2014-09-07
  • 打赏
  • 举报
回复
我需要获取下面的QQ管家的一个网页信息,URL 如下: http://guanjia.qq.com/online_server/result.html?url=http://tt1.icp.newspeedybiz.com/hong/ 学问就是学问,请懂的大侠指点一下 我使用如下方法 string strHTML = ""; WebClient myWebClient = new WebClient(); Stream myStream = myWebClient.OpenRead(url); StreamReader sr = new StreamReader(myStream, System.Text.Encoding.GetEncoding("utf-8")); strHTML = sr.ReadToEnd(); myStream.Close(); return strHTML; 但strHTML出来的信息 与 我们直接用浏览器打开时看到的真实内容相差很大,居然没有检测的结果。(直接用浏览器打开时看到检测的结果)

62,206

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧