【问题标题】:How to stop receive response when send a request to webServer by Httpwebrequest通过Httpwebrequest向webServer发送请求时如何停止接收响应
【发布时间】:2012-03-09 05:10:01
【问题描述】:

我用这种方式发送 POST 请求并得到响应:

response = (HttpWebResponse)request.GetResponse();

但是,我只想发送请求,我不在乎响应是什么。响应包大小可达500Kb~1Mb,浪费大量时间。如何发送请求然后立即停止接收响应。非常感谢!

【问题讨论】:

    标签: c# web httprequest httpresponse


    【解决方案1】:

    如果您只关心接收响应所需的时间,而不是使用的带宽,您可以异步获取响应。

    http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.begingetresponse.aspx

    给出的示例有点复杂,但总体思路是,当调用 BeginGetResponse 时,您的程序不会等待下载响应,就像调用 GetResponse 时一样。您传递给 BeginGetResponse 的第一个方法是方法的名称(称为“回调”),当响应最终 完全下载时将调用该方法。假设您关心这一点,您可以在此处放置代码以检查 HTTP 响应代码。第二个参数是传递给回调方法的“状态”对象。我们将使用它来确保正确清理所有内容。

    看起来像这样:

        private void YourMethod()
        {
            // Set up your request as usual.
            request.BeginGetResponse(DownloadComplete, request);
    
            // Code down here runs immediately, without waiting for the response to download
        }
    
        private static void DownloadComplete(IAsyncResult ar)
        {
            var request = (HttpWebRequest)ar.AsyncState;
            var response = request.EndGetResponse(ar);
    
            // You can check your response here to make sure everything worked.
        }
    

    【讨论】:

    • 如果我不需要验证响应数据,我可以不用DownloadComplete(IAsyncResult ar)方法吗?
    • 我所拥有的可能是您想要使用的最低限度。对 request.EndGetResponse(ar) 的调用确保一切都得到正确清理。
    【解决方案2】:

    我假设您正在向服务器发送 GET 请求。将其更改为 HEAD 请求。

    var request = System.Net.HttpWebRequest.Create("http://...");
    request.Method = "HEAD";
    request.GetResponse();
    

    这只会返回内容的长度。请参阅How to get the file size from http headers 了解更多信息。

    【讨论】:

    • 有没有办法通过发布请求来做到这一点?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-13
    相关资源
    最近更新 更多