I want to read the request stream from a custom HttpWebRequest
class that inherits from HttpWebRequest
and I have tried to read the request stream in different stages but still not sure how to achieve that in the class.
This custom HttpWebRequest
is used to serialize a soap message and I want to know what request has been sent in string format. I also implemented custom HttpRequestCreator
, HttpWebResponse
but still can't find a place/stage from which I can read the request stream.
If i output everything in a MemoryStream
then copy the content to request stream, anyone knows which stage I can do it? In the constructor, BeginGetRequestStream
, EndGetRequestStream
or GetRequestStream
?
If you call the GetRequestStream method, you must use the GetResponse method to retrieve the response. If a WebException is thrown, use the Response and Status properties of the exception to determine the response from the server.
HttpWebRequest exposes common HTTP header values sent to the Internet resource as properties, set by methods, or set by the system; the following table contains a complete list. You can set other headers in the Headers property as name/value pairs.
The GetResponseStream method returns the data stream from the Internet resource.
The GetRequestStream method returns a stream to use to send data for the HttpWebRequest and outputs the TransportContext associated with the stream. After the Stream object has been returned, you can send data with the HttpWebRequest by using the Stream.
The "stream is not readable" will result if there is an error return code, like 404, 503, 401, and so on. It's likely you haven't checked your status code.
Something like this works if the content is text:
public string DownloadString(string uri, out int status)
{
string result= null;
status = 0;
HttpWebResponse response= null;
try
{
HttpWebRequest request = (HttpWebRequest) HttpWebRequest.Create(uri);
// augment the request here: headers (Referer, User-Agent, etc)
// CookieContainer, Accept, etc.
response= (HttpWebResponse) request.GetResponse();
Encoding responseEncoding = Encoding.GetEncoding(response.CharacterSet);
using (StreamReader sr = new StreamReader(response.GetResponseStream(), responseEncoding))
{
result = sr.ReadToEnd();
}
status = (int) response.StatusCode;
}
catch (WebException wexc1)
{
// any statusCode other than 200 gets caught here
if(wexc1.Status == WebExceptionStatus.ProtocolError)
{
// can also get the decription:
// ((HttpWebResponse)wexc1.Response).StatusDescription;
status = (int) ((HttpWebResponse)wexc1.Response).StatusCode;
}
}
finally
{
if (response!= null)
response.Close();
}
return result;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With