如何在C#中执行快速Web请求

我有一个基于HTTP的API,我可能需要多次调用。 问题是我无法获得少于约20秒的请求,尽管通过浏览器发出的相同请求几乎是即时的。 以下代码说明了到目前为止我是如何实现它的。

WebRequest r = HttpWebRequest.Create("https://example.com/http/command?param=blabla"); var response = r.GetResponse(); 

一种解决方案是进行异步请求,但我想知道为什么需要这么长时间,如果我可以避免它。 我也尝试过使用WebClient类,但我怀疑它在内部使用WebRequest。

更新:

在发布模式下运行以下代码大约需要40秒(使用秒表测量):

 WebRequest g = HttpWebRequest.Create("http://www.google.com"); var response = g.GetResponse(); 

我在一所大学工作,网络配置可能会有不同的因素影响性能,但直接使用浏览器表明它应该接近即时。

更新2:

我将代码上传到远程计算机并且工作正常,因此结论必须是.NET代码与浏览器相比做了额外的事情,或者它在通过大学网络解决地址时遇到了问题(代理问题还是什么?!)。

这个问题类似于StackOverflow上的另一篇文章: Stackoverflow-2519655(HttpWebrequest非常慢)

大多数情况下问题是代理服务器属性。 您应该将此属性设置为null,否则对象将尝试在直接转到源之前搜索要使用的相应代理服务器。 注意:默认情况下,此属性处于启用状态,因此您必须明确告知对象不要执行此代理搜索。

 request.Proxy = null; using (var response = (HttpWebResponse)request.GetResponse()) { } 

我在’第一次’尝试时有30秒的延迟 – JamesR对另一篇提及将代理设置为null的post立即解决了!

 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(_site.url); request.Proxy = null; // <-- this is the good stuff ... HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

您的网站是否有无效的SSL证书? 尝试添加此function

 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; } 

您没有关闭您的请求。 一旦达到允许的连接数,就必须等待先前的连接超时。 尝试

 using (var response = g.GetResponse()) { // do stuff with your response }