请求报文和响应报文的结构实例

起始行一般包含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;
}