1

好的,这就是我正在做的事情。我正在向服务器发出请求以下载文件。我通过向网站发出 WebRequest 来做到这一点,就像您通常那样获取响应,尽管我收到一个 403 错误,说我没有权限。

问题是当我将 URL 插入谷歌浏览器时,我被重定向并且我请求的文件被关闭。我在其他浏览器上尝试过该 URL 并得到 403 错误。

谷歌浏览器在做什么让它绕过 403 错误?我试过使用 Google Chrome 用户代理,但这对我没有帮助。

帮助

4

3 回答 3

1

403 状态代码表示您尝试访问的资源已被禁止。如,不要问,因为你没有得到它。这与 401 代码的不同之处在于,在服务器确认资源交付之前会提出授权质询。

虽然这可能是编程配置,但也可能通过 Web 服务器配置的资源访问限制来解释。

您能否验证 Google Chrome 中下载的资源是否是您尝试访问的预期资源?

于 2009-10-22T23:29:22.500 回答
1

可能网络服务器识别 Chrome 用户代理并允许它下载文件,但不允许其他用户代理下载。设置您的 WebRequest 以使用与 Google Chrome 相同的用户代理字符串和设置 - 默认情况下,它可能使用 IE 设置。

编辑:这是MSDN 关于如何设置 WebRequest 用户代理字符串的说明。要查找任何浏览器的用户代理,请在其地址栏中输入:

javascript:prompt('my user agent string is', navigator.userAgent);
于 2009-10-22T22:59:06.840 回答
1

谢谢您的帮助。您的回答都没有直接帮助我,但感谢您的尝试。

我的程序试图从服务器上提取文件。我已经想出了如何在使用 Chrome 时解决身份验证问题并在服务器上查找文件。事实证明,他们的 Web 服务使用用户会话更加先进。

基本上我无法访问 web 服务命令,所以我所能做的就是使用基本的 http url 来获得预定义的响应。我用来获取服务器文件的文件 url 不是唯一的,它是动态的,取决于网络浏览器/会话。我正在使用 HTTPRequest 对象来获取 HTML 文件,以便我可以解析它。使用 html 文件,我对其进行解析以找出文件的动态 ID(我认为它是唯一的)。然后我会将它附加到 URL 的末尾。在 Chrome 中,我将被重定向并显示下载提示。问题是当我想下拉文件时需要 webbrowser 对象。知道这一点后,我使用 webbrowser 对象来获取文件 ID,然后使用相同的 webbrowser 对象(根据 webserver 技术上相同的会话)来下载文件。

它相当复杂。基本上我的程序是一个小技巧,它提供了服务器是 try 块的功能。

希望这对你们未来的任何项目都有帮助。

于 2009-10-30T02:07:33.430 回答