首页 新闻 会员 周边

我想获取一个网页自己发出的请求

0
悬赏园豆:200 [已解决问题] 解决于 2014-05-20 11:38

我想用C#获取一个网页自己发出的请求,

我的问题在http://bbs.csdn.net/topics/390771672?page=1#post-397318473

希望能获得答案,已经困住好几天了。

问题补充:

有没有人知道

祥子爱游戏的主页 祥子爱游戏 | 初学一级 | 园豆:19
提问于:2014-05-14 10:19
< >
分享
最佳答案
2

看了一大堆回复,我觉得楼主有必要详细交代下需求。

 

我的理解:楼主有一个URL。

在浏览器打开这个URL应该是有一个flv格式的视频的。

楼住想下载这个视频,也就想做一个视频采集程序?

收获园豆:170
喵喵喵猫 | 小虾三级 |园豆:1742 | 2014-05-15 09:30

那个你去看我csdn的帖子不就行了吗

@芬达: 网页打开时,会自己发出HTTP的请求,我想用c#的代码捕获这些url。

类似Fiddler的功能。

我在百度上搜到可以调用Fiddler的api,我不会用

祥子爱游戏 | 园豆:19 (初学一级) | 2014-05-15 12:13

@zzx112358: CSDN的帖子我也看了,我想不是我一个人没弄清楚你想表达什么,回复的和你的问题完全不符合。

直到你说了“

网页打开时,会自己发出HTTP的请求,我想用c#的代码捕获这些url。类似Fiddler的功能。”

这句话,我想大家都会明白你的问题了。

好了废话不多说:

fiddler实现原理是通过代理,让所有请求通过这个代理连接web server,从而捕获这些请求。

既然知道了原理,给几个资料,参考下如何实现一个这样的proxy server:

http://www.oschina.net/code/snippet_12_660

https://github.com/Siyy/SharpProxy

http://bartdesmet.net/blogs/bart/archive/2007/02/22/httplistener-for-dummies-a-simple-http-request-reflector.aspx

喵喵喵猫 | 园豆:1742 (小虾三级) | 2014-05-15 20:08

@芬达: 就是这个意思。

我现在就想用Fiddler的插件来着

祥子爱游戏 | 园豆:19 (初学一级) | 2014-05-16 13:15

@zzx112358: 

你可以使用fiddlercore 来实现 

参考http://www.telerik.com/fiddler/fiddlercore

喵喵喵猫 | 园豆:1742 (小虾三级) | 2014-05-19 10:01

@芬达: 看不懂,不会用

祥子爱游戏 | 园豆:19 (初学一级) | 2014-05-19 10:28

@芬达: 这个是Fiddler的扩展类库吗?

直接引用就可以了吗

祥子爱游戏 | 园豆:19 (初学一级) | 2014-05-19 10:38

@zzx112358: 亲哥~~~,我发你的地址有文档,有demo,有源代码。你还要怎么样????

喵喵喵猫 | 园豆:1742 (小虾三级) | 2014-05-19 20:02

@zzx112358: core可以看出是核心内库。一般来说如果是扩展,会有extentions or ex 字样。

喵喵喵猫 | 园豆:1742 (小虾三级) | 2014-05-19 20:28
其他回答(3)
1

这个挺困难的,首先你用HttpWebRequest获取网页本身的HTML是没有问题的,下一步就比较麻烦了,因为你需要解析出来这个网页还调用了哪些资源,比如JS、CSS、图片、视频等,然后在JS和CSS中可能还调用了其他的各种文件,需要递归解析。

实际上,只是第一次解析,就已经近似于搞一个浏览器了,要解析HTML、要解析CSS、要执行JS(因为执行的JS可能还在调用其他JS)。

有一个歪招儿,没用过,不知道行不行得通:在winform中嵌一个webbrowser控件,然后让webbrowser加载你要处理的网页,通过监控和处理webbrowser的属性或方法什么的,来获取你想要的资源。你可以试试

收获园豆:10
丁学 | 园豆:18730 (专家六级) | 2014-05-14 10:30

这个能用GET请求做吗

支持(0) 反对(0) 祥子爱游戏 | 园豆:19 (初学一级) | 2014-05-14 11:28

@zzx112358: get只能解决获取一个资源(HTML、JS、CSS)的问题,解决不了解析的问题,你这个的难点在于从代码中解析出所有资源地址

支持(0) 反对(0) 丁学 | 园豆:18730 (专家六级) | 2014-05-14 14:18

@丁学: 我只要选中行的URL,在说可以多吃GET

支持(0) 反对(0) 祥子爱游戏 | 园豆:19 (初学一级) | 2014-05-14 15:51

@zzx112358: 你用 SOCKET 或 HttpWebRequest 得到只是 HTML 脚本,你必须写一个 HTML 和 JS 脚本解释器(IE 等浏览器的主要功能就是 HTML 和 JS 脚本解释器),解析出来的指令可能是绘制文字、图元,也可能是再请求一个到多个资源,或者调用系统的一个 API 等。

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2014-05-14 16:17

@Launcher: 呃,不太明白你的意思。

我只想知道GET可以吗?可以的话,怎么写?

 

支持(0) 反对(0) 祥子爱游戏 | 园豆:19 (初学一级) | 2014-05-14 16:21

@zzx112358: 是不是 GET 还不一定呢,你得看 HTML 里的脚本是咋写的,比如我有这样一个页面

http://q.cnblogs.com/q/62232/#c_712661,其内容为:

<html lang="zh-cn">

   <head>

         script src="http://common.cnblogs.com/script/jquery.js" type="text/javascript"/>

    </head>

</html>

那么我先发起一个请求:

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://q.cnblogs.com/q/62232/#c_712661");

此请求执行后,我得到的 HttpWebReponse 中的内容是这样(忽略了 HTTP HEADER):

<html lang="zh-cn">

   <head>

         script src="http://common.cnblogs.com/script/jquery.js" type="text/javascript"/>

    </head>

</html>

然后我通过解析次内容,发现一条标记:<script src="http://common.cnblogs.com/script/jquery.js" type="text/javascript"/>,根据 HTML 协议的规定,此条脚本表示此页面需要引用 jquery.js 文件,并且此文件的绝对路径为:http://common.cnblogs.com/script/jquery.js,那么我再发起一次请求,如下:

 

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://common.cnblogs.com/script/jquery.js"); 

req.Method = "GET"; // src

req.ContentType = "text/javascript" ; // type="text/javascript"

那么我再次请求,得到的就是 jquery.js 文件。

http://www.w3school.com.cn/tags/att_img_src.asp 

PS:学习《编译原理》有助于你理解此问题。

 

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2014-05-14 16:45

@Launcher: 我想请求的资源是视频格式的

支持(0) 反对(0) 祥子爱游戏 | 园豆:19 (初学一级) | 2014-05-14 16:47

@Launcher: 

而且资源是load的时候就加载上的

支持(0) 反对(0) 祥子爱游戏 | 园豆:19 (初学一级) | 2014-05-14 16:51

@zzx112358: 视频也一样,统称为资源,只是 HTML5 同之前的版本有些差别,你需要多解析一些标记:http://www.w3school.com.cn/tags/html_ref_audio_video_dom.asp

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2014-05-14 16:59

@Launcher: 你有没有看那个图片我放在csdn上的图片,我用F12抓包抓包的。

支持(0) 反对(0) 祥子爱游戏 | 园豆:19 (初学一级) | 2014-05-14 17:01

@Launcher: 呃,能不能帮我解决下

支持(0) 反对(0) 祥子爱游戏 | 园豆:19 (初学一级) | 2014-05-15 13:49
0

是的,用Webbrowser空间可以勉强实现.最优解决方案是webkit吧,因为JS执行的中可以发出请求,

这种东西真要做,非常麻烦,只能自己动手做才行,说是没什么用的,最多就是说个思路,具体实现会遇到很多问题的

收获园豆:10
吴瑞祥 | 园豆:29449 (高人七级) | 2014-05-14 10:47

这个用GET 或者socket可以做吗

支持(0) 反对(0) 祥子爱游戏 | 园豆:19 (初学一级) | 2014-05-14 11:31

@zzx112358: 不可以的,第一个要解决的就是JS执行的问题.

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2014-05-14 11:49

加载的时候就执行了,不是我触发的事件

支持(0) 反对(0) 祥子爱游戏 | 园豆:19 (初学一级) | 2014-05-14 15:54

@吴瑞祥: 我现在是用httpwebrespense做的 

支持(0) 反对(0) 祥子爱游戏 | 园豆:19 (初学一级) | 2014-05-14 19:01
1

你是想要获得网页的内容,还是要把网页程现出来?

如果是想得到内容,那css的内容就没必要加载其它的 资源 都是可以单独请求 用 HttpWebRequest 与 HttpWebResponse

收获园豆:10
Zery | 园豆:6151 (大侠五级) | 2014-05-14 12:28
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册