WebRequest C# 403 错误
Posted
技术标签:
【中文标题】WebRequest C# 403 错误【英文标题】:WebRequest C# 403 Error 【发布时间】:2010-12-09 06:41:52 【问题描述】:好的,这就是我正在做的事情。 我正在向服务器发出请求以下载文件。 我通过向网站发出 WebRequest 来做到这一点,以像往常一样获取响应,尽管我收到一个 403 错误,说我没有权限。
问题是当我将 URL 插入谷歌浏览器时,我被重定向并且我请求的文件被关闭。我在其他浏览器上试过这个网址,得到403错误。
谷歌浏览器做了什么来绕过 403 错误?我尝试使用 Google Chrome 用户代理,但这对我没有帮助。
帮助
【问题讨论】:
【参考方案1】:网络服务器可能会识别 Chrome 用户代理并允许它下载文件,但不允许其他用户代理下载。设置您的 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);
【讨论】:
【参考方案2】:403 status code 表示您尝试访问的资源已被禁止。如,不要问,因为你没有得到它。这与 401 代码的不同之处在于,在服务器确认资源交付之前会提出授权挑战。
虽然这可能是编程配置,但这也可能是通过网络服务器配置的资源访问限制来解释的。
您能否验证 Google Chrome 中下载的资源是您尝试访问的预期资源?
【讨论】:
【参考方案3】:感谢您的帮助。您的回答都没有直接帮助我,但感谢您的尝试。
我的程序试图从服务器上提取文件。我已经想出了如何在使用 Chrome 时解决身份验证问题并在服务器上查找文件。事实证明,他们的 Web 服务使用用户会话更加先进。
基本上我没有访问网络服务命令的权限,所以我所能做的就是使用基本的 http url 来获得预定义的响应。我用来获取服务器文件的文件 url 不是唯一的,它是动态的,取决于网络浏览器/会话。我正在使用 HTTPRequest 对象来获取 html 文件,以便我可以解析它。使用 html 文件,我对其进行解析以找出文件的动态 ID(我认为它是唯一的)。然后我会将它附加到 URL 的末尾。在 Chrome 中,我将被重定向并显示下载提示。问题是当我想下拉文件时需要 webbrowser 对象。知道这一点后,我使用 webbrowser 对象来获取文件 ID,然后使用相同的 webbrowser 对象(根据 webserver 技术上相同的会话)来下载文件。
这相当复杂。基本上我的程序是一个小 hack,它提供了服务器是 try 块的功能。
希望这对你们未来的任何项目有所帮助。
【讨论】:
如果我需要实施类似的解决方案,“这很复杂”肯定会对我有所帮助。谢谢! :) 是的,这都是关于 cookie 的。这是我第一个使用互联网的程序,可能应该选择一个更容易上手的程序。以上是关于WebRequest C# 403 错误的主要内容,如果未能解决你的问题,请参考以下文章
C# webrequest 抓取数据时,多个域Cookie的问题
Sharepoint Online 上禁止 WebRequest
发送带有 C# 错误 403 的文件和数据。CURL 没有错误