http协议区分头信息和正文

http协议中的头信息和正文是采用空行分开,什么是空行呢?简单来说,就是\r\n\r\n。

所以将服务器返回的数据用\r\n\r\n分开后的结果,一个是头信息,一个是正文信息。

C#的代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.Text.RegularExpressions;

using System.IO;

namespace SOCKET
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int port = 80;
            GetSocket gs = new GetSocket();
            string result = gs.SocketSendReceive("www.baidu.com", port);
            Regex regex = new Regex("\r\n\r\n");//以cjlovefl分割
            string[] bit = regex.Split(result);
            MessageBox.Show(bit[1]);

            StreamWriter sw = new StreamWriter("D:\\1.txt");
            sw.Write(result);
            sw.Close();
        }
    }
}

其中result就是由服务器返回的包括头部和正文的信息。

其中GetSocket类如下:

using System;
using System.Text;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Windows.Forms;
using System.Text.RegularExpressions;

public class GetSocket
{
    public Socket ConnectSocket(string server, int port)
    {
        Socket s = null;
        IPHostEntry hostEntry = null;
        // Get host related information.
        hostEntry = Dns.GetHostEntry(server);
        // Loop through the AddressList to obtain the supported AddressFamily. This is to avoid
        // an exception that occurs when the host IP Address is not compatible with the address family
        // (typical in the IPv6 case).
        foreach (IPAddress address in hostEntry.AddressList)
        {
            IPEndPoint ipe = new IPEndPoint(address, port);
            Socket tempSocket =
                new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
            tempSocket.Connect(ipe);
            if (tempSocket.Connected)
            {
                s = tempSocket;
                break;
            }
            else
            {
                continue;
            }
        }
        return s;
    }
    // This method requests the home page content for the specified server.
    public  string SocketSendReceive(string server, int port)
    {
        string request = "GET / HTTP/1.0\r\nHost: " + server +
            "\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.1; rv:29.0) Gecko/20100101 Firefox/29.0\r\nConnection: keep-alive\r\n\r\n";
        Byte[] bytesSent = Encoding.ASCII.GetBytes(request);
        Byte[] bytesReceived = new Byte[256];
        // Create a socket connection with the specified server and port.
        Socket s = ConnectSocket(server, port);
        if (s == null)
            return ("Connection failed");
        // Send request to the server.
        s.Send(bytesSent, bytesSent.Length, 0);
        // Receive the server home page content.
        int bytes = 0;
        string page = "Default HTML page on " + server + ":\r\n";
        // The following will block until te page is transmitted.
        do
        {

            bytes = s.Receive(bytesReceived, bytesReceived.Length, 0);
            page =page+ Encoding.ASCII.GetString(bytesReceived, 0, bytes);
        }
        while (bytes > 0);

        return page;
    }
    /*
    public static void Main(string[] args)
    {
        string host = "http://www.baidu.com";
        int port = 80;
        if (args.Length == 0)
            // If no server name is passed as argument to this program,
            // use the current host name as the default.
            host = Dns.GetHostName();
        else
            host = args[0];
        string result = SocketSendReceive("www.goodjobs.cn", port);
        StreamWriter sw = new StreamWriter("D:\\1.txt");
        string w = "";
        sw.Write(result);
        sw.Close();
    }
     * */
}

测试成功!

http协议区分头信息和正文,布布扣,bubuko.com

时间: 2024-08-25 09:40:29

http协议区分头信息和正文的相关文章

简易商品信息管理系统——首个Web项目

正文之前 在学习了一段时间的Java Web的内容之后,当然需要有个项目来练练手,我相信大多数人的首选项目都是信息管理系统吧,所以我选择了商品信息管理系统 目前项目源码已全部上传至GitHub,欢迎大家来fork -- 商品信息管理系统 正文 项目构思 简易的管理系统,结构为 Servlet + JSP + MySQL,使用IntelliJ IDEA,搭建起了这个项目,源码中有很详细的注释,如果刚开始学习JavaWeb的内容,学一下Servlet,再搭配这个项目,岂不是美滋滋,有需要就拿去,如果

Linux 安全

 Linux 安全 1.安装 使系统处于单独(或隔离)的网络中.以防止未受保护的系统连接到其它网络或互联网中受到可能的攻击 安装完成后将下面软件卸载 pump                            apmd                            lsapnptools                    redhat-logos mt-st                      kernel-pcmcia-cs             Setserial  

httpd详解

_3_2HTTPD和http.md #APACHE ##相关概念 URI:统一资源标识符,全局范围内.路径. URL:统一资源定位符. PV:page view 每天页面访问量 UV:user view每天独立IP访问量 超链接:跳转文档 端口: 0-1023:众所周知,永久地分配给固定的应用使用,特权端口: 1024-41951:亦为注册端口,但要求不是特别严格,分配给程序注册为某应用使用:3306/tcp, 11211/tcp: 41952+:客户端程序随机使用的端口,动态端口,或私有端口:

apache web服务器与防盗链的设置

一.安装apache2.4.23 新版本的httpd-2.4新增以下特性: 新增模块: mod_proxy_fcgi(可提供fcgi代理) mod_ratelimit(限制用户带宽) mod_request(请求模块,对请求做过滤) mod_remoteip(匹配客户端的IP地址) 对于基于IP的访问控制做了修改,不再支持allow,deny,order机制,而是统一使用require进行 还新增以下几条新特性: 1.MPM支持在运行时装载;不过要开启这种特性,在编译安装要启用这三种功能: --

退役了退役了-

hi 昨晚打球悲剧的把脚崴了. 要知道,上一次崴脚是四年前:那一次伤的是左脚,也是我这么多年打篮球的生涯中,这么多次崴脚中,最严重的一次受伤.休息了整整一个月,受寝室兄弟们的无微不至的照顾,最后也买了高贵的护踝,才得以重新复出的. 后来,再打球,我的左脚一般都是带着护踝的,平时的小崴基本没什么影响.四年过去了,昨晚算是好日子到头了.不幸的是,这次伤的是右脚,情况也是一样的严重. 不过,受个伤,也有自己的时间来思考平时浮躁中来不及触碰的东西了.福祸相依的说,php学习不能停哦. 1.AJAX 二.

连载《一个程序猿的生命周期》- 36、突破失败的自我感悟

一个程序猿的生命周期 微信平台 口    号:职业交流,职业规划:面对现实,用心去交流.感悟.  公众号:iterlifetime二维码:  百木-ITer职业交流奋斗 群:141588103 注:有些网友怀疑我写的文章的真实性,我可以负责任的告诉大家,99%是真实经历.想法.感悟.否则,浪费自己的时间,也浪费大家的时间,我认为是没有意义的. <一个程序猿的生命周期>也会一直写下去,以10年为界限,目前写的是第一个10年,小标题定为<起航>.以后,会把所有文章重新整理,定制成册.

对于enigma machine的破解

最近看到一篇文章,详细讲解了二战时期德军的enigma machine是怎样被破解的.enigma machine本质上是利用substitution cipher的原理来进行加密的. 1)替换加密的原理及破解方法 在古代,当人们想要对一段文字进行加密时,会把原文(即明文)中的字母按照某种配对关系替换成其他的字母,从而得到一段别人看不懂的密文. 例如我们可以按照以下的配对关系对明文进行加密: 在加密过程中,第一行明码表中的字母分别被替换成位于该字母下方的大写字母.加密结束后,将会得到一段不经解密

SAP Web Service简介与配置方法

p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-size: 10.5000pt } h1 { margin-top: 17.0000pt; margin-bottom: 16.5000pt; margin-left: 0.0000pt; text-indent: 21.0000pt; page-break-after: avoid; text-al

linux--ab压力测试详解

简介     ab是Apache自带的压力测试工具,全称是ApacheBench,ab是Apache的一个安装组件,所以需要安装Apache后才可以使用,该命令位于Apache安装目录下的bin文件夹中,ab是专门用于HTTP Server的benchmark testing,可以同时模拟多个并发请求,ab的设计意图是描绘当前所安装的Apache的执行性能,主要是显示所安装的Apache每秒可以处理多少个请求,ab同微软的WAST.HP的LoadRunner.QALoad等比起来,它要方便易用得