HttpWebRequest.GetRequestStream 出现的问题
最近在做自动提交表单的模块,遇到了关于HttpWebRequest.GetRequestStream在执行写入流操作时有Cookie丢失的问题。
上代码 :
1 myHttpWebRequest.ContentType = "application/x-www-form-urlencoded";
2 myHttpWebRequest.ContentLength = postBuilder.Length;
3 myHttpWebRequest.Method = "POST";
4 Stream myRequestStream = myHttpWebRequest.GetRequestStream();
5 StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312"));
6 myStreamWriter.Write(postBuilder.ToString());
7 //把POST数据写入HttpWebRequest的Request流
8 myStreamWriter.Close();
2 myHttpWebRequest.ContentLength = postBuilder.Length;
3 myHttpWebRequest.Method = "POST";
4 Stream myRequestStream = myHttpWebRequest.GetRequestStream();
5 StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312"));
6 myStreamWriter.Write(postBuilder.ToString());
7 //把POST数据写入HttpWebRequest的Request流
8 myStreamWriter.Close();
9 myRequestStream.Close();
其实在执行 myStreamWriter.Write()时,HttpWebRequest就开始向服务器发送请求数据了,写入后response的数据已经接受到了,所以要在write之前配置好HttpWebRequest的CookieContainner。
附带一句MSDN上关于 myStreamWriter.Write()的解释:
GetRequestStream 方法返回用于发送 HttpWebRequest 数据的流。返回 Stream 对象后,可以通过使用 Stream.Write 方法发送带有 HttpWebRequest 的数据。
检索流之前必须先设置 ContentLength 属性的值。