Search code examples
c#httpwebrequest

What does HttpWebRequest.GetRequestStream do?


Code example:

HttpWebRequest request =
   (HttpWebRequest)HttpWebRequest.Create("http://some.existing.url");

request.Method = "POST";
request.ContentType = "text/xml";

Byte[] documentBytes = GetDocumentBytes ();


using (Stream requestStream = request.GetRequestStream())
{
   requestStream.Write(documentBytes, 0, documentBytes.Length);
   requestStream.Flush();
   requestStream.Close();
}

When I do request.GetRequestStream(), there's nothing to send in the request. From the name of the method, and what the IntelliSense shows ("Get System.IO.Stream to use to write request data"), nothing indicates that this line of code will connect to a server, but it seems it does...

Can anyone explain to me what HttpWebRequest.GetRequestStream() does?


Solution

  • Getting the request stream does not trigger the post, but closing the stream does. Post data is sent to the server in the following way:

    1. A connection is opened to the host
    2. Send request and headers
    3. Write Post data
    4. Wait for a response.

    The act of flushing and closing the stream is the final step, and once the input stream is closed (i.e. the client has sent what it needs to the server), then the server can return a response.