c# - .Net HttpClient - 403:请启用cookies
问题描述
我正在尝试使用CodePen URL 扩展发出 HTTP 请求,以接收任何 pen的HTML 部分。
这在浏览器中运行良好,并且如果您将其复制到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 演示。
这是代码:
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
示例中添加。
有任何想法吗?
谢谢
编辑
该问题似乎与Cloudflare 阻止的 C# HttpClient类似,我将自行联系 CodePen 并更新此问题。
解决方案
我在.Net fiddle 中收到的错误消息说你需要做一个验证码。
我希望这意味着当您运行它时,您的浏览器中有一个成功的验证码 cookie,但您的 .Net 应用程序没有,因为它不是同一个浏览器。
推荐阅读
- networking - 网络图的平均路径长度?
- python - 如何优化读取 Battery Staus 的 python 代码
- python - Scrapy - 控制流中的 LinkExtractor 以及为什么它不起作用
- java - Javalin,无法获取请求正文,除非直接从 HttpServlet
- html - 一些字体很棒的图标没有显示
- python - 在 python 中为电报机器人创建良好的数据库
- java - 如何使用 Oracle 12c 数据库配置 Jasper 服务器
- android - 弹出软键盘时保持视图组可见
- node.js - 如何修复“错误:找不到 Python 可执行文件“python”,您可以设置 PYTHON 环境变量。” ubuntu nodejs npm
- python - 如何检测用于在特定字段的表单中输入字母的所有框?