C# Optimize HttpWebRequest
本文关键字:HttpWebRequest Optimize | 更新日期: 2023-09-27 18:05:58
我正在制作自己的HTTPWebRequest类,我正在尝试优化读取缓冲区并发出请求所需的时间,到目前为止,它需要大约800-1000ms每个请求google.com
相同的代码在c++中需要~ 200ms任何建议我如何优化这更好?
public class OWebReq
{
public string LastError;
public bool LastOK = false;
public OWebReq()
{
}
public static void Init()
{
ServicePointManager.Expect100Continue = false;
ServicePointManager.DefaultConnectionLimit = 9999;
WebRequest.DefaultWebProxy = (WebProxy)null;
ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true;
}
public string GET(string url, WebProxy proxy = null)
{
LastOK = false;
var req = (HttpWebRequest)WebRequest.Create(url);
req.UserAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36";
req.Proxy = proxy;
req.KeepAlive = false;
req.Timeout = 5000;
req.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
try
{
using(var response=(HttpWebResponse)req.GetResponse())
{
var responseStream = response.GetResponseStream();
if(responseStream!=null)
{
using (var sr = new StreamReader(responseStream))
{
return sr.ReadToEnd();
}
}
}
}
catch (Exception ex)
{
LastError = ex.Message;
return null;
}
return null;
}
}
执行代码直到var response=(HttpWebResponse)req.GetResponse()
占用~ 350ms
尝试设置ServicePointManager.Expect100Continue
或req.ServicePoint.Expect100Continue
为false。
基本要点是,请求最初只发送报头,并等待服务器响应代码100(继续)。这是350ms的上限。接收到响应后,发送请求的主体。这样,您就不会在网络上放置非常大的请求(具有许多MB的请求体),当服务器无论如何都会拒绝请求(需要重定向或身份验证,或者报头中有错误等)。
这个链接有非常详细的说明