HTTPWebRequest 403 Forbidden - 伪造网络浏览器

Posted

技术标签:

【中文标题】HTTPWebRequest 403 Forbidden - 伪造网络浏览器【英文标题】:HTTPWebRequest 403 Forbidden - faking web browser 【发布时间】:2016-09-24 04:55:45 【问题描述】:

这是我伪造浏览器请求的代码:

HttpWebRequest webReq = WebRequest.CreateHttp(url);
webReq.CookieContainer = new CookieContainer();
webReq.Method = "GET";
webReq.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0";
webReq.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
webReq.Headers.Add(HttpRequestHeader.AcceptLanguage, "en-us,en;q=0.5");
webReq.Headers.Add(HttpRequestHeader.CacheControl, "no-cache");

webReq.AllowAutoRedirect = true;
webReq.MaximumAutomaticRedirections = 50;

using (WebResponse response = webReq.GetResponse())

    using (Stream stream = response.GetResponseStream())
    
        StreamReader reader = new StreamReader(stream);
        return reader.ReadToEnd();
    

但我收到此 URL 的 403 HTTP 错误:http://www.alchourouk.com/xml_top_article/rss.xml

我不明白为什么,没有身份验证,没有使用 cookie...

在 Postman 中,我没有错误,这是它生成的代码:

var client = new RestClient("http://www.alchourouk.com/xml_top_article/rss.xml");
var request = new RestRequest(Method.GET);
request.AddHeader("postman-token", "1b40ceba-6311-0fe2-1566-62a2d59950a0");
request.AddHeader("cache-control", "no-cache");
IRestResponse response = client.Execute(request);

这里没什么特别的。 知道为什么我的代码会出现 403 错误吗?

【问题讨论】:

【参考方案1】:

您需要的是Referer HTTP 标头:

webReq.Referer = "http://www.alchourouk.com/";

它会工作得很好。

Live demo here

【讨论】:

以上是关于HTTPWebRequest 403 Forbidden - 伪造网络浏览器的主要内容,如果未能解决你的问题,请参考以下文章

HTTPWebRequest 403 Forbidden - 伪造网络浏览器

使用 HttpWebRequest.GetResponse() 进行屏幕抓取时出现错误“远程服务器返回错误:(403) Forbidden”

spring security 在使用 AJAX 登录时显示 403 错误

ASPX 和 IIS 8.5 - 403 禁止错误

discord.errors.Forbidden:403 Forbidden(错误代码:50013):设置角色时缺少权限错误

发布到 url 时禁止 403