C#HttpWebRequest vs浏览器

时间:2013-02-28 21:26:32

标签: c# http rest networking httpwebrequest

我正在尝试与Shopping.com REST服务集成 所以我编写了一个简单的(最小代码)C#应用程序来使用HttpWebRequest类检索XML数据。我使用StopWatch进行基准测试,响应时间(包括Stream.ReadToEnd())大约是1300-1700毫秒。

听起来不错,但后来我用Fiddler在Chrome浏览器中测试了响应时间,响应时间大约为600-800。

我读过几篇文章。一些建议将HttpWebRequest.Proxy设置为null / WebRequest.DefaultWebProxy,但它没有显着改进。

这里是request-url:
http://sandbox.api.shopping.com/publisher/3.0/rest/GeneralSearch?apiKey=78b0db8a-0ee1-4939-a2f9-d3cd95ec0fcc&trackingId=7000610&keyword=nikon

那么,我该怎么办才能达到这个响应时间?

1 个答案:

答案 0 :(得分:0)

你启用gzip和deflate吗?

此外,第一次在代码中执行Web请求时,会有一个预热来加载必要的程序集,初始化服务点并建立HTTP连接,因此请务必查看第二次和随后的处决。

编辑:对不起,你仍然需要使用GZipStream或DeflateStream解码结果,但这至少可以让你明白。有关详细信息,请参阅此处:HttpWebRequest & Native GZip Compression

var timer = Stopwatch.StartNew();

var url = "http://sandbox.api.shopping.com/publisher/3.0/rest/GeneralSearch?apiKey=78b0db8a-0ee1-4939-a2f9-d3cd95ec0fcc&trackingId=7000610&keyword=nikon";
var webRequest = WebRequest.Create(url);
webRequest.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate");
using (var webResponse = webRequest.GetResponse())
using (var responseStream = webResponse.GetResponseStream())
using (var streamReader = new StreamReader(responseStream))
{
    var content = streamReader.ReadToEnd();
}

var timeSpan = timer.Elapsed;
Console.WriteLine(timeSpan);