Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

HttpWebRequest.GetRequestStream : What it does?

Code exemple:

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 the intellisense it shows ("Get System.IO.Stream to use to write request data"), nothing indicates that this line of code will connect to the distant server.
But it seems it does...

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

Thanks for your enlightenments.

like image 782
Johnny5 Avatar asked Mar 16 '11 13:03

Johnny5


People also ask

What is HttpWebRequest?

The HttpWebRequest class provides support for the properties and methods defined in WebRequest and for additional properties and methods that enable the user to interact directly with servers using HTTP.

What is HttpWebResponse C#?

This class contains support for HTTP-specific uses of the properties and methods of the WebResponse class. The HttpWebResponse class is used to build HTTP stand-alone client applications that send HTTP requests and receive HTTP responses.


1 Answers

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.

like image 119
mdm Avatar answered Oct 08 '22 08:10

mdm