我想从继承自HttpWebRequest
的自定义HttpWebRequest
类中读取请求流,并且我尝试在不同阶段读取请求流但仍不确定如何在类中实现
此自定义HttpWebRequest
用于序列化soap消息,我想知道以字符串格式发送了什么请求。我还实现了自定义HttpRequestCreator
,HttpWebResponse
,但仍无法找到可以从中读取请求流的位置/阶段。
如果我输出MemoryStream
中的所有内容然后将内容复制到请求流,任何人都知道我可以在哪个阶段执行此操作?在构造函数中,BeginGetRequestStream
,EndGetRequestStream
或GetRequestStream
?
答案 0 :(得分:12)
如果存在错误返回代码,如404,503,401等,将导致“流不可读”。您可能还没有检查过您的状态代码。
如果内容是文字,那么这样的东西就有效:
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;
}
答案 1 :(得分:10)
你的问题不清楚。
如果您在其他代码写入流后(POST请求)尝试读取HttpWebRequest
的请求流,则无法进行此操作。 (流直接发送到服务器,不存储在内存中)
相反,您需要公开自己的MemoryStream,然后在您准备发送请求时将其写入HttpWebRequest的请求流。
答案 2 :(得分:-5)
尝试使用Fiddler。为我工作。
的Fiddler: