Mor*_*sen 28 c# httpwebrequest
我有一个基于HTTP的API,我可能需要多次调用.问题是我无法获得少于约20秒的请求,尽管通过浏览器发出的相同请求几乎是即时的.以下代码说明了到目前为止我是如何实现它的.
WebRequest r = HttpWebRequest.Create("https://example.com/http/command?param=blabla");
var response = r.GetResponse();
Run Code Online (Sandbox Code Playgroud)
一种解决方案是进行异步请求,但我想知道为什么需要这么长时间,如果我可以避免它.我也尝试过使用WebClient类,但我怀疑它在内部使用WebRequest.
更新:
在发布模式下运行以下代码大约需要40秒(使用秒表测量):
WebRequest g = HttpWebRequest.Create("http://www.google.com");
var response = g.GetResponse();
Run Code Online (Sandbox Code Playgroud)
我在一所大学工作,网络配置可能会有不同的因素影响性能,但直接使用浏览器表明它应该接近即时.
更新2:
我将代码上传到远程机器并且工作正常,因此结论必须是.NET代码与浏览器相比做了额外的事情,或者它在通过大学网络解决地址时遇到了问题(代理问题或其他什么?!).
Jam*_*and 30
这个问题类似于StackOverflow上的另一篇文章: Stackoverflow-2519655(HttpWebrequest极其缓慢)
大多数情况下,问题是代理服务器属性.您应该将此属性设置为null,否则对象将尝试在直接转到源之前搜索要使用的相应代理服务器.注意:默认情况下,此属性处于启用状态,因此您必须明确告知对象不要执行此代理搜索.
request.Proxy = null;
using (var response = (HttpWebResponse)request.GetResponse())
{
}
Run Code Online (Sandbox Code Playgroud)
Dav*_*ett 13
我在'第一次'尝试时有30秒的延迟 - JamesR对另一篇提及将代理设置为null的帖子立即解决了!
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(_site.url);
request.Proxy = null; // <-- this is the good stuff
...
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Run Code Online (Sandbox Code Playgroud)
您的网站是否有无效的 SSL 证书?尝试添加这个
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AlwaysAccept);
//... somewhere AlwaysAccept is defined as:
using System.Security.Cryptography.X509Certificates;
using System.Net.Security;
public bool AlwaysAccept(object sender, X509Certificate certification, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
return true;
}
Run Code Online (Sandbox Code Playgroud)