c# WebClient Headers Expect

今天碰到一个日了狗的问题,先贴上我的代码,就是创建一个post请求的。

        //创建json类型的POST
        public static string CreatPost(string url, string postString)
        {
            WebClient web = new WebClient();
            //编码,尤其是汉字,事先要看下抓取网页的编码方式  
            byte[] postData = Encoding.UTF8.GetBytes(postString);
            web.Headers.Add("Content-Type", "application/json");
            byte[] info = web.UploadData(url, "POST", postData);//得到返回字符流  
            return Encoding.UTF8.GetString(info);//解码 
        }

 

在对接接口的时候,出现卡死现象,但是使用postman调用却是没有问题的,这个问题就奇怪了,开始以为程序环境问题,换一个还是不行,这就不是出在程序环境上面了。只能抓这个HTTP请求,来分析这两个请求有什么不一样的地方,然后都加上去看看,最后发现一个headers头有个字段是比较奇怪的,程序发出来的请求会自动携带上去,基本可以断定就是这玩意惹得祸了,来查查资料看看这个头是干什么玩意用的,就是下面这个。

Expect: 100-continue

解释:100-continue 是用于客户端在发送 post 数据给服务器时,征询服务器情况,看服务器是否处理 post 的数据,如果不处理,客户端则不上传 post 数据,反之则上传。在实际应用中,通过 post 上传大数据时,才会使用到 100-continue 协议。

如果服务器不支持这个,可能会出现卡死现象,无响应,所以需要把这个header去掉就可以了,我是用WebClient来写的,所以添加一行代码即可。

 

        //创建json类型的POST
        public static string CreatPost(string url, string postString, List<string> heads)
        {
            WebClient web = new WebClient();
            //编码,尤其是汉字,事先要看下抓取网页的编码方式  
            byte[] postData = Encoding.UTF8.GetBytes(postString);
            foreach (string item in heads)
            {
                web.Headers.Add(item);
            }
            //请求头加上这句话后就无响应了.Expect: 100-continue
            ServicePointManager.Expect100Continue = false;
            byte[] info = web.UploadData(url, "POST", postData);//得到返回字符流  
            return Encoding.UTF8.GetString(info);//解码 
        }

 

 

 

 

转载于:https://my.oschina.net/uwith/blog/2998736

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值