• C# 模拟post数据提交时 出现如下错误: System.Net.WebException: 远程服务器返回错误: (417) Expectation Failed 的解决办法


    一般情况的代码,重点在出错的那段代码,其他的代码可以根据自己的情况写相应的代码:

    HttpWebRequest req=WebRequest.Create(url1) as HttpWebRequest;
       req.Method="POST";
       req.Accept="application/json, text/javascript, */*";
       req.Referer=url2;

       req.UserAgent="Mozilla/4.0";
       req.ContentType="application/x-www-form-urlencoded";
       req.CookieContainer=cookie;
       req.KeepAlive=true;
       string postString="uname=ioriliaotest3&" +
                      "password=19850420&" +
                      "passwordconf=19850420" +
                      "&mobile=&verifycode="+
                       HttpUtility.UrlEncode(textBox1.Text,encoding)+
                      "&dmain=163.com&version=regvf1";
       byte[] postByte=Encoding.ASCII.GetBytes(postString);
       Stream reqStream=req.GetRequestStream();
       reqStream.Write(postByte,0,postByte.Length);
       reqStream.Close();
       HttpWebResponse resp=req.GetResponse() as HttpWebResponse;//出错 WebException: 远程服务器返回错误: (417) Expectation Failed
       Stream respStream=resp.GetResponseStream();
       StreamReader respReader=new StreamReader(respStream,encoding);
       richTextBox1.AppendText(respReader.ReadToEnd());
       respStream.Close();
       respReader.Close();

    归纳其原因:
    httpwebrequest控件有一个透明过程,先向服务方查询url是否存在而不发送POST的内容,服务器如果证实url是可访问的,才发送POST,早期的Apache就认为这是一种错误,而IIS却可以正确应答

    解决方法:

    写.net程序时在始化代码中,或者配置文件app.config之类的文件中
    加下这么一句就可以了

    ServicePointManager.Expect100Continue = false;
  • 相关阅读:
    SQLServer如何批量替换某一列中的某个字符串
    能成为一名合格的Java架构师
    来看看Uber的司机支持服务签到及预约系统的架构设计思路
    什么是三层架构?你真的理解分层的意义吗?
    京东7Fresh新零售架构设计分析
    解密京东千亿商品系统核心架构
    因特尔黑科技:黑暗中快速成像系统
    分布式缓存架构设计
    各种排序算法汇总小结
    系统架构设计之-任务调度系统的设计
  • 原文地址:https://www.cnblogs.com/tianguook/p/2101793.html
Copyright © 2020-2023  润新知