如何执行在C#中的快速Web请求(How to perform a fast web request

2019-06-25 17:55发布

我有一个基于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代码做一些额外的东西相比,浏览器或具有通过校园网解决地址问题(代理问题什么?!)。

Answer 1:

这个问题类似于在计算器上另一篇文章: #1-2519655(HttpWebRequest的极慢)

大部分时间的问题是代理服务器属性。 您应该将此属性设置为null,否则,对象将尝试寻找合适的代理服务器之前直接到源使用。 注:此属性是默认启用,所以你必须明确地告诉对象不执行此代理搜索。

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


Answer 2:

我在上“第一”的尝试在30秒的延迟 - JamesR的参照其他职位提代理设置为NULL立即解决它!

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

...

HttpWebResponse response = (HttpWebResponse)request.GetResponse();


Answer 3:

您的网站是否有一个无效的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;
}


Answer 4:

你不要关闭您的请求。 只要你打允许的连接数,你必须等待较早的时间了。 尝试

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


文章来源: How to perform a fast web request in C#