0

我正在处理理论上简单的 WebClient 请求。直到这个星期天,一切都运行良好,显然该网站已经改变了他们的水平。

我所做的是(简化分析 - HTTP 和 HTTPS 给出相同的结果):

string strRemoteFileNameGPW = @"http://www.gpw.pl/ajaxindex.php?action=GPWQuotations&start=showTable&tab=all&lang=PL&type=&full=1&format=html&download_xls=1";

接下来(有或没有代理)这工作正常(例如使用 HtmlAgilityPack.HtmlDocument)。

using (WebClient webClient = new WebClient())
{
 string strResult = webClient.DownloadString(strRemoteFileNameGPW);
}    
            

不确定发生了什么变化,所以我尝试查看 StackOverflow 并在这里尝试了所有东西。没有任何效果,或者我终于失明了......并且忽略了一些明显的事情。

我尝试监听流量,最后甚至添加了一些标题,试图更接近普通浏览器:

 webClient.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36");
 webClient.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9");
 // webClient.Headers.Add("Host", "www.gpw.pl");
 webClient.Headers.Add("Cache-Control", "max-age=0");
 webClient.Headers.Add("Accept-Encoding", "gzip, deflate, br");
 webClient.Headers.Add("Accept-Language", "pl-PL,pl;q=0.9,en-US;q=0.8,en;q=0.7");
 // webClient.Headers.Add("Upgrade-Insecure-Requests", "1");
 webClient.Headers.Add("sec-ch-ua-mobile", "?0");
 webClient.Headers.Add("sec-ch-ua-platform", "Windows");
 webClient.Headers.Add("Sec-Fetch-Site", "none");
 webClient.Headers.Add("Sec-Fetch-Mode", "navigate");
 webClient.Headers.Add("Sec-Fetch-User", "?1");
 webClient.Headers.Add("Sec-Fetch-Dest", "document");
 webClient.Headers.Add("sec-ch-ua-platform", "Windows");
 webClient.Headers.Add("sec-ch-ua-platform", "Not A;Brand\";v=\"99\", \"Chromium\";v=\"98\", \"Google Chrome\";v=\"98");

预期结果- 获取显示的结果并保存以供进一步解析数据。

没有任何帮助,我不断收到异常“发送请求时发生错误。” 和内部异常“错误:无法从传输连接中读取数据:现有连接被远程主机强制关闭”

防火墙,AV 已禁用。在其他机器上试过。结果相同。我错过了什么?这在以前是完美的。他们是否注意到我的请求并以某种方式阻止了像我这样的请求?

4

1 回答 1

0

似乎服务器需要Connection: keep-alive标头。

顺便说一句:查看WebClient 上的评论。我建议你HttpClient改用。

一个似乎有效的例子:

var url @"http://www.gpw.pl/ajaxindex.php?action=GPWQuotations&start=showTable&tab=all&lang=PL&type=&full=1&format=html&download_xls=1";

using var client = new HttpClient();
client.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:97.0) Gecko/20100101 Firefox/97.0");
client.DefaultRequestHeaders.Accept.ParseAdd("text/html,application/xhtml+xml,application/xml");
client.DefaultRequestHeaders.Connection.ParseAdd("keep-alive");

var strResult = await client.GetStringAsync(url);

看看小提琴在行动

于 2022-02-15T19:22:08.907 回答