0

假设我想从 url 自动下载一个文件,该文件位于需要身份验证的网站内,我使用基于 Internet Explorer 的自动 WebBrowser 控件登录到该网站。但是,一旦我在那里并获取文件的链接,如果我尝试通过导航到它直接通过 IE6 下载它,将会出现“你要打开还是保存这个文件”模式对话框。如果我尝试使用 C# WebClient 类下载它,它没有成功,下载的只是一小段无意义的 javascript。事实上,出于好奇,我测试了 Gmail 网站内的 WebClient 方法试图下载附件,但它也没有工作(我知道从 Gmail 中我可以通过 POP3 界面抓取它们,这只是一个实验)。

好吧,所以这让我想知道这一切的潜在机制。首先,也许我以错误的方式使用 WebClient ?或者在这种情况下可能有一些其他标准的 C# 类用于下载文件?

如果不是,应用程序是否有可能欺骗浏览器的行为,以便服务器认为文件请求来自它,即使它实际上来自同一进程的另一部分?在这种情况下,浏览器到底在做什么,让它下载文件而 WebClient 不能这样做?

4

2 回答 2

2

如果您想了解两个网络程序的不同之处,您必须查看网络流量。使用Fiddler或类似的东西来查看每个程序在做什么,然后比较两者。

于 2010-07-18T03:23:21.220 回答
1

这通常与 cookie 或浏览器发送的其他 HTTP 请求标头有关。只要它们发送完全相同的标头,Web 服务器就无法区分 b/wa 人工驱动的 Web 浏览器或代码控制的“webclient”。

在人工驱动的“会话”身份验证(输入用户名/密码)中,通常会导致一些 cookie 从服务器发送到浏览器,并且您会一直“登录”,因为您的浏览器在发出后续请求时会不断将这些 cookie 发送回服务器.

因此,如果您的网络客户端可以正确发送(发布?)凭据,并根据需要继续存储和重新发送 cookie(和/或“referrer”/“user-agent”标头),它不应该有任何不同(在最后它只是请求和 HTT 协议的响应链)。

您正在使用的特定“控件”中可能存在安全防护措施,以防止它(或 API)被恶意软件使用。“一个程序正试图代表你发送电子邮件,你确定要允许吗?” 提示,MS Outlook 中伴随的 5 秒延迟就是这样一个例子。因此,如果您正在使用的特定 API 具有这种提示/预防措施,您可能不会完全默默地处理事情。

于 2010-07-18T02:40:01.270 回答