好的,这就是我正在做的事情。我正在向服务器发出请求以下载文件。我通过向网站发出 WebRequest 来做到这一点,就像您通常那样获取响应,尽管我收到一个 403 错误,说我没有权限。
问题是当我将 URL 插入谷歌浏览器时,我被重定向并且我请求的文件被关闭。我在其他浏览器上尝试过该 URL 并得到 403 错误。
谷歌浏览器在做什么让它绕过 403 错误?我试过使用 Google Chrome 用户代理,但这对我没有帮助。
帮助
好的,这就是我正在做的事情。我正在向服务器发出请求以下载文件。我通过向网站发出 WebRequest 来做到这一点,就像您通常那样获取响应,尽管我收到一个 403 错误,说我没有权限。
问题是当我将 URL 插入谷歌浏览器时,我被重定向并且我请求的文件被关闭。我在其他浏览器上尝试过该 URL 并得到 403 错误。
谷歌浏览器在做什么让它绕过 403 错误?我试过使用 Google Chrome 用户代理,但这对我没有帮助。
帮助
403 状态代码表示您尝试访问的资源已被禁止。如,不要问,因为你没有得到它。这与 401 代码的不同之处在于,在服务器确认资源交付之前会提出授权质询。
虽然这可能是编程配置,但也可能通过 Web 服务器配置的资源访问限制来解释。
您能否验证 Google Chrome 中下载的资源是否是您尝试访问的预期资源?
可能网络服务器识别 Chrome 用户代理并允许它下载文件,但不允许其他用户代理下载。设置您的 WebRequest 以使用与 Google Chrome 相同的用户代理字符串和设置 - 默认情况下,它可能使用 IE 设置。
编辑:这是MSDN 关于如何设置 WebRequest 用户代理字符串的说明。要查找任何浏览器的用户代理,请在其地址栏中输入:
javascript:prompt('my user agent string is', navigator.userAgent);
谢谢您的帮助。您的回答都没有直接帮助我,但感谢您的尝试。
我的程序试图从服务器上提取文件。我已经想出了如何在使用 Chrome 时解决身份验证问题并在服务器上查找文件。事实证明,他们的 Web 服务使用用户会话更加先进。
基本上我无法访问 web 服务命令,所以我所能做的就是使用基本的 http url 来获得预定义的响应。我用来获取服务器文件的文件 url 不是唯一的,它是动态的,取决于网络浏览器/会话。我正在使用 HTTPRequest 对象来获取 HTML 文件,以便我可以解析它。使用 html 文件,我对其进行解析以找出文件的动态 ID(我认为它是唯一的)。然后我会将它附加到 URL 的末尾。在 Chrome 中,我将被重定向并显示下载提示。问题是当我想下拉文件时需要 webbrowser 对象。知道这一点后,我使用 webbrowser 对象来获取文件 ID,然后使用相同的 webbrowser 对象(根据 webserver 技术上相同的会话)来下载文件。
它相当复杂。基本上我的程序是一个小技巧,它提供了服务器是 try 块的功能。
希望这对你们未来的任何项目都有帮助。