Reputation: 277
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
?
Upvotes: 12
Views: 37468
Reputation: 13572
Try using Fiddler. Worked for me.
Fiddler:
Upvotes: -5
Reputation: 192467
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;
}
Upvotes: 13
Reputation: 887433
Your question is unclear.
If you're trying to read an HttpWebRequest
's request stream after other code has written to the stream (a POST request), it's not possible. (The stream is sent directly to the server and is not stored in memory)
Instead, you'll need to expose your own MemoryStream, then write it to the HttpWebRequest's request stream wen you're ready to send the request.
Upvotes: 11