本地接收百度等外部文件显示结果 使用TcpClient可避免HttpWebRequest的常见错误

有时使用HttpWebRequest对象会出现错误,总结有三种:

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

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

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;
        }

-------------------------------------------------------------------------------------------------------------------------------------------------

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml;
using System.Net;
using System.Text;
using System.IO;


using System.Net.Sockets;

public partial class TEST_XMLHTTPREQUEST_Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //string name = "";
        //name = Request.QueryString["username"];
        //Response.Write(name);
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
              Response.Write(GetHTMLTCP("http://www.baidu.com/s?wd=中国&pn=30"));

    }
    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;
    }

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值