首先我要说的是,我不知道如何给这个问题起标题,如果标题有误导性,我很抱歉,请随时留下建议。
我对发送 POST 和 GET 请求相当陌生。我前段时间开发了一个应用程序,它通过拉动联赛、比赛和频道来利用 (https://www.directv.com/sports-info/all/all) 来帮助以轻松的格式对数据进行排序可通过 EXCEL 读取。
最近,这个网站更新了(路径改变了,一些后端头也改变了),因为发生了这种情况,我的请求不再起作用。我知道路径是问题所在,所以我只是通过程序更新了所有 GET/POST 请求以利用新的路径/URL,现在我遇到了一个未知问题。
描述该问题的最佳方式是,即使超时时间极长,程序也会停止并超时,并且我无法得到响应。我什至无法使用 PuppeteerSharp(基本上是 .NET 的 Chrome 调试/DevEnv)获得可靠的响应,以下是我尝试过但失败的方法。我不知道是什么阻止了这些请求。
我尝试将 Origin 设置为服务器标头
access-control-allow-origin
与“directv.com”和“mvp.directv.com”一起存在,而不是之前的“*”。
我尝试给客户端一个 UserAgent 来假装是 Chrome。
我尝试插入从网站的 chrome 实例收集的特定 cookie(使用 PuppeteerSharp 并手动插入它们)Cookie:XSRF-TOKEN、directv_session、user_id 等
我尝试过设置大超时和短超时。
我已经尝试使用wireshark-ing来确认它没有被我的防火墙阻止(这没有意义,因为我可以通过chrome连接到它,对吧?)
手动将 ServerCertificationValidation 设置为 true 以确保 SSL/TLS 不是问题。
尝试了多个端点,例如“https://www.directv.com/sports-info/all/all”、“https://www.directv.com/sports-info/options/leagues”、“https://www.directv.com/sports-info/options/leagues”、“https:/ /directv.com/sports-info/all/custom”等
尝试向“https://directv.com/sports-info/options/selected”发送请求以设置位置设置等。
这些都不起作用。
以下是我目前正在处理的内容
var handler = new HttpClientHandler
{
ServerCertificateCustomValidationCallback = (message, cert, chain, errors) =>
{
Console.WriteLine($"Certificate error: {errors}");
return true; // Only for debugging purposes
}
};
var client = new HttpClient(handler)
{
Timeout = TimeSpan.FromSeconds(120)
};
client.DefaultRequestHeaders.Add("Origin", "https://www.directv.com");
client.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36");
HttpResponseMessage res_leagues = await client.GetAsync("https://www.directv.com/sports-info/options/leagues");
尝试添加这些头,我认为它会起作用
client.DefaultRequestHeaders.Add("Referer", "https://www.directv.com");
client.DefaultRequestHeaders.Add("Accept", "application/json, text/plain, */*");
client.DefaultRequestHeaders.Add("Accept-Encoding", "gzip, deflate, br");
client.DefaultRequestHeaders.Add("Accept-Language", "en-US,en;q=0.9");
client.DefaultRequestHeaders.Add("Connection", "keep-alive");