2009-10-22 109 views
1

好吧,这就是我正在做的。 我正在向服务器发出请求以下拉文件。 我这样做,通过WebRequest的网站获得响应就像你通常会,虽然我得到一个403错误,说我没有权限。WebRequest C#403错误

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

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

帮助

回答

1

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

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

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

这很复杂。基本上我的程序是一个小黑客,它提供了服务器试图阻止的功能。

希望这可以帮助你们在未来的任何项目中。

+0

“这很复杂”,如果我需要实施类似的解决方案,肯定会对我有所帮助。谢谢! :) – mrduclaw 2009-10-30 02:16:11

+0

是的,这一切都是关于饼干。这是我使用互联网的第一个程序,可能应该选择一个更简单的程序来开始。 – Thomas 2009-10-31 01:20:44

1

也可能是Web服务器识别浏览器的用户代理,并允许该文件被它下载的,而不是由其他用户代理。设置WebRequest使用与Google Chrome相同的用户代理字符串和设置 - 默认情况下,它可能使用IE设置。

编辑:这是instruction from MSDN about how to set the WebRequest user agent string。 要找出任何浏览器的用户代理,进入这个到它的地址栏:

javascript:prompt('my user agent string is', navigator.userAgent); 
1

403 status code表示你正在试图达到资源是被禁止的。如在,不要问,因为你没有得到它。这与401代码的不同之处在于,授权挑战在服务器确认资源交付之前呈现。

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

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