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();

9                     myRequestStream.Close();

其实在执行 myStreamWriter.Write()时,HttpWebRequest就开始向服务器发送请求数据了,写入后response的数据已经接受到了,所以要在write之前配置好HttpWebRequest的CookieContainner。

附带一句MSDN上关于 myStreamWriter.Write()的解释:

  GetRequestStream 方法返回用于发送 HttpWebRequest 数据的流。返回 Stream 对象后,可以通过使用 Stream.Write 方法发送带有 HttpWebRequest 的数据。

检索流之前必须先设置 ContentLength 属性的值。

转载于:https://www.cnblogs.com/SoYoung/archive/2011/04/12/HttpWebRequest.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
public static T Post<T>(string url, string data, string staffId, string contentType) { try { byte[] bytes = Encoding.UTF8.GetBytes(data); HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url); string timeStamp = ApiHelper.GetTimeStamp(); string random = ApiHelper.GetRandom(); httpWebRequest.Headers.Add("staffid", staffId.ToString()); httpWebRequest.Headers.Add("timestamp", timeStamp); httpWebRequest.Headers.Add("nonce", random); //ResultMsg signToken = ApiHelper.GetToken(url, staffId); // httpWebRequest.Headers.Add("signature", ApiHelper.GetSignature(timeStamp, random, staffId, data, signToken)); httpWebRequest.Headers.Add("jwtcookie", GetJwt(url, data));//cwj 直接通过jwt验证身份 httpWebRequest.Method = "POST"; httpWebRequest.ContentLength = (long)bytes.Length; httpWebRequest.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"; httpWebRequest.ContentType = contentType; Stream requestStream = httpWebRequest.GetRequestStream(); requestStream.Write(bytes, 0, bytes.Length); httpWebRequest.Timeout = 300000; httpWebRequest.Headers.Set("Pragma", "no-cache"); HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse(); Stream responseStream = httpWebResponse.GetResponseStream(); StreamReader streamReader = new StreamReader(responseStream, Encoding.UTF8); string text = streamReader.ReadToEnd(); requestStream.Close(); streamReader.Close(); responseStream.Close(); httpWebRequest.Abort(); httpWebResponse.Close(); return JsonConvert.DeserializeObject<T>(text); } catch (Exception) { throw; } }
最新发布
06-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值