请求报文和响应报文的结构实例
起始行一般包含http版本号,数字状态码,状态情况
而数字状态码,常见有以下几种
200 代表ok
301 永久跳转
403 没权限
404 没有这个文件
500 未知的错误
502 网关错误
503 服务器超载,停机维护
504 网关超时
响应头部,主要包括,服务器的web软件版本,服务器时间,长连接还是短连接,设置字符集等等
这里的空行和请求报文空行一样
HTTP/1.1规范定义了如下47种首部字段
以下是一个C# 代码实例
/// <summary> /// 获取html 代码 /// </summary> /// <param name="ip">如 42.51.12.85</param> /// <param name="prot">如 80</param> /// <param name="url">如 www.luofenming.com</param> /// <returns></returns> private string GetHtml(string ip, string prot, string url) { Socket socket = CreateSocket(ip, prot); try { StringBuilder sb = new StringBuilder();//发送的请求报文 sb.AppendLine("GET / HTTP/1.1"); sb.AppendLine("Accept: */*"); sb.AppendLine("User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; )"); sb.AppendLine("Host: " + url); sb.AppendLine("Connection: Keep-Alive\r\n\r\n");//注意发送的字符串 后面有两个回车换行 byte[] data = System.Text.Encoding.Default.GetBytes(sb.ToString()); socket.Send(data); byte[] rData = new byte[500 * 1024]; socket.Receive(rData); string rs = Encoding.GetEncoding("UTF-8").GetString(rData);//编码类型如 UTF-8 或 GB2312 等 return rs; } catch (Exception ex) { return ex.Message; } finally { socket.Close(); socket.Dispose(); } } /// <summary> /// 创建Scoket 客户端 /// </summary> /// <param name="IP"></param> /// <param name="prot"></param> /// <returns></returns> public Socket CreateSocket(string IP, string prot) { //定义一个套接字用于监听客户端发来的信息 包含3个参数(IP4寻址协议,流式连接,TCP协议) Socket socketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //发送信息 需要1个IP地址和端口号 IPAddress ipaddress = IPAddress.Parse(IP); //获取文本框输入的IP地址 //将IP地址和端口号绑定到网络节点endpoint上 IPEndPoint endpoint = new IPEndPoint(ipaddress, int.Parse(prot)); //获取文本框上输入的端口号 //向指定的ip和端口号的服务端发送连接请求 用的方法是Connect 不是Bind socketClient.Connect(endpoint); return socketClient; }