C# 具有f5大IP的HttpClient-无法从传输连接读取数据(但curl可以正常工作)
使用.NET Core 3.0,我正在尝试获取的httpResponseMessage.StatusCode为:C# 具有f5大IP的HttpClient-无法从传输连接读取数据(但curl可以正常工作),c#,.net-core,httpclient,f5,C#,.net Core,Httpclient,F5,使用.NET Core 3.0,我正在尝试获取的httpResponseMessage.StatusCode为: var sw=Stopwatch.StartNew(); var httpClient=新的httpClient(); //最新的Chrome用户代理无法工作 常量字符串userAgent=@“Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/78.0.3904.108 Saf
var sw=Stopwatch.StartNew();
var httpClient=新的httpClient();
//最新的Chrome用户代理无法工作
常量字符串userAgent=@“Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/78.0.3904.108 Safari/537.36”;
//Curl用户代理在10秒后工作
//常量字符串userAgent=“curl/7.55.1”;
httpClient.DefaultRequestHeaders.Add(“用户代理”,userAgent);
//试图让“保持活力”标题正常工作
//httpClient.DefaultRequestHeaders.Add(“连接”,“关闭”);
//httpClient.DefaultRequestHeaders.Add(“连接”,“保持活动”);
httpClient.DefaultRequestHeaders.Add(“连接”,“保持活动”);
变量url=”https://www.element14.com/community/community/designcenter/azure-sphere-starter-kits?ICID=azure-sphereCH topbanner”;
尝试
{
var httpResponseMessage=等待httpClient.GetAsync(url);
var sc=(int)httpResponseMessage.StatusCode;
}
捕获(HttpRequestException-ex)
{
//始终失败,无法从传输连接读取数据:
//连接尝试失败,因为连接方在一段时间后没有正确响应,
//或建立的连接失败,因为连接的主机无法响应。。
sw.Stop();
//总是在19.3或19.5毫秒左右出现故障
}
使用
curl-Ihttp://www.element14.com/community/community/designcenter/azure-sphere-starter-kits?ICID=azure-sphereCH topbanner
我们可以看到它是在一个F5大IP负载平衡器的后面,这是HttpClient的一个问题:
从F5侧:
错误更新
错误全文如下:
连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机没有响应
VS2019中的错误屏幕截图为:
小提琴手更新
来自Chrome的请求正在工作
来自HttpClient的请求失败。注意连接:keep-alive差异
-设置标题,我看不出与Fiddler有什么区别
卷曲更新
传递curl用户代理虽然速度很慢(10秒)。有什么错误/异常?您将部分错误作为注释发布,这似乎是一个超时异常。
curl
不使用自己的网络堆栈,它使用与HttpClient相同的东西。在F5的网站上是否有一个Cooookkkk--屏幕刮刀保护程序发现你没有发布预期的标题?也许它不喜欢代理
标题?因此,F5显然不喜欢未经许可的屏幕抓取。一种选择是请求该权限,并使用他们为此提供的任何API/URL。另一种选择是使用Fiddler或任何其他调试代理来找出哪些头、代理字符串可以工作,并将其用于HttpClientThank二者。我正在建立一个断开的链接检查器,想知道对内容如此感兴趣的页面的状态代码。请求许可是个好主意。这只是一个有趣的边缘案例。请更新代码以反映用户代理通过。域www.element14.com
解析为AKAMAI地址。刮擦保护(如果有的话)更可能出现在F5上,而不是F5上(如果它正在运行ASM,而且乍一看不是这样)。在使用其他IP或代理的另一台计算机上尝试您的客户端。