从C#应用程序调用HTTP处理程序引发异常
本文关键字:程序 异常 处理 HTTP 应用程序 调用 | 更新日期: 2023-09-27 18:25:39
我正试图以类似于Chromes Postman和Advanced rest客户端的方式,将数据从HTTP处理程序检索到我的C#应用程序。
例如
Target = http://10.113.171.82/handler
Payload =
"<?xml version="1.0" encoding="utf-8"?>
<webpage pageID="406" cmdID="GET" cursor="0"/>"
这在Postman或Advanced Rest Client中运行良好,但在C#应用程序中失败得很惨。最近的错误是
服务器违反了协议。Section=ResponseStatusLine
我尝试了常见的建议(KeepAlive False,useUnsafeHeaderParsing="true")。
这是缩写版本。
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create("http://10.113.171.82/handler");
string payload = "<?xml version='"1.0'" encoding='"utf-8'"?><webpage pageID='"406'" cmdID='"GET'" cursor='"0'"/>";
byte[] data = Encoding.GetEncoding("iso-8859-1").GetBytes(payload);
myHttpWebRequest.ContentLength = data.Length;
myHttpWebRequest.KeepAlive = false;
CookieContainer cookieJar = new CookieContainer();
myHttpWebRequest.ProtocolVersion = HttpVersion.Version11;
myHttpWebRequest.CookieContainer = cookieJar;
myHttpWebRequest.Accept = "*/*";
myHttpWebRequest.AllowAutoRedirect = true;
myHttpWebRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2;)";
myHttpWebRequest.Timeout = 100000;
myHttpWebRequest.Accept = "text/xml; charset=utf-8";
myHttpWebRequest.Method = "POST";
myHttpWebRequest.ServicePoint.Expect100Continue = false;
myHttpWebRequest.ServicePoint.MaxIdleTime = 100000;
myHttpWebRequest.KeepAlive = false;
myHttpWebRequest.ContentType = "text/xml; charset=utf-8";
Stream requestStream = myHttpWebRequest.GetRequestStream();
requestStream.Write(data, 0, data.Length);
requestStream.Close();
myHttpWebRequest.AllowWriteStreamBuffering = true;
//Error on the GetResponse
HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
Stream responseStream = myHttpWebResponse.GetResponseStream();
StreamReader myStreamReader = new StreamReader(responseStream, Encoding.Default);
pageContent = myStreamReader.ReadToEnd();
myStreamReader.Close();
responseStream.Close();
myHttpWebResponse.Close();
需要注意的事项。如果我删除URLEncoding,错误是"基础连接已关闭:接收时发生意外错误。"尽管这似乎有点偶然。此外,如果我从目标中删除/handler,我会得到HTML响应,但不是我想要的。大多数属性都是为了找到解决方案而添加的。我想我错过了一些基本的东西!
我想我已经发现了问题。服务器根本不返回任何标头。如果我启用源代码调试,我会在System.Net.Connection.SyncRead(HttpWebRequest请求,布尔用户检索流,布尔probeRead)
尽管这解决了这个问题(为什么会发生),但它只是产生了一个新的问题。如何在没有HTTP/1.0 200 OK 的情况下接收HTTP请求