如何在通过Httpwebrequest向webServer发送请求时停止接收响应

本文关键字:请求 响应 Httpwebrequest webServer | 更新日期: 2023-09-27 18:27:09

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

response = (HttpWebResponse)request.GetResponse();

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

如何在通过Httpwebrequest向webServer发送请求时停止接收响应

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

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

给出的示例有点复杂,但总体思路是,当调用BeginGetResponse时,程序不会像刚调用GetResponse那样等待下载响应。传递给BeginGetResponse的第一个方法是一个方法的名称(称为"回调"),当响应最终被完全下载时,该方法将被调用。假设您关心HTTP响应代码,那么您可以将代码放在这里检查HTTP响应代码。第二个参数是一个"state"对象,它被传递给回调方法。我们会用这个来确保所有东西都被正确地清理干净。

它看起来像这样:

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

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

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

这只会返回内容的长度。有关详细信息,请参阅如何从http标头获取文件大小。