码迷,mamicode.com
首页 > Windows程序 > 详细

c#通过webrequest请求远程http服务时出现的问题

时间:2015-08-27 09:27:21      阅读:289      评论:0      收藏:0      [点我收藏+]

标签:

用WebRequest和WebClient,两种方式,请求一个由http服务发布的应用,结果出现异常。

有三种,1、System.Net.WebException: 服务器提交了协议冲突. Section=ResponseStatusLine

2、System.Net.WebException: 基础连接已经关闭: 连接被意外关闭。
3、System.Net.ProtocolViolationException: 无法发送具有此谓词类型的内容正文。

另外,用同样的代码,请求普通的页面没问题,返回正常。

分析:

1、所请求的应用,虽然应用了http服务,但却没有完全遵守http协议。导致,请求时需要某些参数配合。

2、WebRequest和WebClient,可配置的参数很少,有可能不会满足要求。

3、其实http服务,就是TCP协议的一个特例,所有能解决TCP问题的方法,都可用在http上

解决:

1、先想到Socket应用,因为它是解决TCP的最基本方法。不过,由于对http请求的头,没有太深的研究,结果失败。

2、想到了原来使用过的TcpClient,比Socket用起来方便些。问题解决了。

源码:

private string GetHTMLTCP(string URL) {
            string strHTML = "";//用来保存获得的HTML代码
            TcpClient clientSocket = new TcpClient();
            Uri URI = new Uri(URL);
            clientSocket.Connect(URI.Host, URI.Port);
            StringBuilder RequestHeaders = new StringBuilder();//用来保存HTML协议头部信息
            RequestHeaders.AppendFormat("{0} {1} HTTP/1.1\r\n", "GET", URI.PathAndQuery);
            RequestHeaders.AppendFormat("Connection:close\r\n");
            RequestHeaders.AppendFormat("Host:{0}\r\n", URI.Host);
            RequestHeaders.AppendFormat("Accept:*/*\r\n");
            RequestHeaders.AppendFormat("Accept-Language:zh-cn\r\n");
            RequestHeaders.AppendFormat("User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)\r\n\r\n");
            Encoding encoding = Encoding.Default;
            byte[] request = encoding.GetBytes(RequestHeaders.ToString());
            clientSocket.Client.Send(request);
            //获取要保存的网络流
            Stream readStream = clientSocket.GetStream();
            StreamReader sr = new StreamReader(readStream, Encoding.Default);
            strHTML = sr.ReadToEnd();
            readStream.Close();
            clientSocket.Close();
            return strHTML;
        }

c#通过webrequest请求远程http服务时出现的问题

标签:

原文地址:http://www.cnblogs.com/hornet/p/4762254.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!