2015-12-04 2 views
1

Я пытаюсь получить данные из обработчика HTTP в мое приложение C# аналогично Chromes Postman и Advanced rest client.Вызов обработчика HTTP из исключения для исключения приложений C#

Например

Target = http://10.113.171.82/handler 
Payload = 
"<?xml version="1.0" encoding="utf-8"?> 
<webpage pageID="406" cmdID="GET" cursor="0"/>" 

Это прекрасно работает внутри Почтальон или Advanced Client Rest, но с треском проваливается из C# приложения. Последняя ошибка:
Сервер совершил нарушение протокола. Раздел = 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, ошибка будет следующей: «Основное соединение было закрыто: произошла непредвиденная ошибка при получении». Хотя это кажется немного хитом и промахом. Кроме того, если я удаляю/обработчик из цели, я получаю ответ HTML, но не тот, который я хочу. Большинство свойств были добавлены в попытке найти решение. Я думаю, что я пропустил что-то принципиальное!

ответ

1

Я думаю, что я обнаружил проблему. Сервер не возвращает заголовков. Если включить отладку источника я нашел пустую ссылку на исключение System.Net.Connection.SyncRead (HttpWebRequest запрос, Boolean userRetrievedStream, Boolean probeRead)

Хотя это решает эту проблему (почему это происходит) он просто создает новую проблему , Как получить HTTP-запрос без HTTP/1.0 200 OK

Смежные вопросы