【问题标题】:.Net HttpClient - 403: Please enable cookies.Net HttpClient - 403:请启用cookies
【发布时间】:2019-11-15 09:30:37
【问题描述】:

我正在尝试使用 CodePen URL extensions 发出 HTTP 请求以接收 HTML part of any pen

这在浏览器中运行良好,如果您将其复制到 F12 控制台并运行以下代码:

fetch("https://codepen.io/AdamDipinto/pen/MWWzgMa.html")
  .then(x => x.text())
  .then(x => console.log(x))

注意:如果我使用像 Fiddler 这样的代理,那么我会得到与我的 C# HTTP 示例相同的 403 'Please enable cookies' 响应

但是当我使用 HTTPClient 在我的 C# 应用程序中尝试它时,我得到一个 403 和一个页面返回说“请启用 cookie”。
这是.Net Fiddle to demo
代码如下:

        CookieContainer cookies = new CookieContainer();
        HttpClientHandler handler = new HttpClientHandler();
        handler.CookieContainer = cookies;
        handler.UseCookies = true;
        using(HttpClient client = new HttpClient(handler))
        {
            client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36");
            Uri site = new Uri("https://codepen.io/AdamDipinto/pen/MWWzgMa.html");
            var response1 = client.SendAsync(new HttpRequestMessage(HttpMethod.Get,site)).Result;
            var content = response1.Content.ReadAsStringAsync().Result;
            Console.WriteLine(content);
        }

注意:如果您在浏览器中使用 F12 并检查 cookie,CodePen 会添加“codepen_session”cookie。
不知道是不是这个cookie是服务器不能在C'HttpClient例子里加,但在fetch例子里能加。

有什么想法吗?

谢谢

编辑

这个问题似乎与C# HttpClient blocked by Cloudflare 相似,我会自己联系 CodePen 并更新这个问题。

【问题讨论】:

  • 请在您的问题中包含所有必要的代码,而不是在指向其他地方的某些链接后面。
  • .Net Fiddle 显示控制台输出,所以更有用 - 我会更新我的问题
  • @Longoon12000 我正在使用handler.CookieContainer = cookies; handler.UseCookies = true;,我认为这样可以解决问题 - 也许限制太小了?

标签: c# http fetch dotnet-httpclient codepen


【解决方案1】:

我在 .Net fiddle 中收到的错误消息说你需要做一个验证码。

我希望这意味着当您运行它时,您的浏览器中有一个成功的验证码 cookie,但您的 .Net 应用程序没有,因为它不是同一个浏览器。

【讨论】:

  • 我认为 Capture 是一个红鲱鱼,它适用于 fetch。我已经更新了我的问题,在浏览器中,服务器添加了一个“codepen_session”cookie,也许这不是在 C# HttpClient 中添加的
  • 从 JS 控制台以隐身模式运行时会发生什么?
  • 它是一样的,它仍然可以正常工作 - 我认为隐身仍然允许 cookie,它们只是在你每次关闭时被删除
  • 那么我猜 codepen 正在查看用户代理并且不允许某些用户代理。你能在你的 .NET 代码中设置用户代理吗?
  • 我已经用user-agents 标题更新了我的问题 - 不高兴:(
猜你喜欢
  • 1970-01-01
  • 2011-08-13
  • 1970-01-01
  • 1970-01-01
  • 2021-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-08
相关资源
最近更新 更多