Never too old to learn.

http协议自学(2)

Posted on By Andy Zhu

之前,我们以及可以假装成服务端让客户端——浏览器来访问了,但是为了知道服务器把文件内容传回来的语法是什么,我们需要假装成客户端

那么我们如何假装成客户端呢?我们需要使用上次从谷歌浏览器中get到的语法

首先开启WindowsIIS服务,建立一个网站,然后写如下代码来连接:

uses zul_socket;
var
 a:Tclient;
 msg:ansistring;
begin
 a:=Tclient.create;
 a.host:='127.0.0.1';
 a.port:=8080;
 a.init;
 a.connect;
 writeln('connected');
 while true do
  begin
   a.send('GET / HTTP/1.1'+#13#10+'Host: localhost:8080'+#13#10+'Connection: keep-alive'+#13#10+'Cache-Control: max-age=0'+#13#10+'Upgrade-Insecure-Requests: 1'+#13#10+'User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/70.0.3538.110 Safari/537.36'+#13#10+'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8'+#13#10+'Accept-Encoding: gzip, deflate, br'+#13#10+'Accept-Language: zh-CN,zh;q=0.9'+#13#10#13#10#13#10);
   msg:=a.recv;
   while msg<>'' do
    begin
     writeln(msg);
     msg:=a.recv;
    end;
  end;
end.

运行,然后发现:

HTTP/1.1 200 OK
Content-Type: text/html
Last-Modified: Thu, 11 Apr 2019 13:34:37 GMT
Accept-Ranges: bytes
ETag: "b022b44e6bf0d41:0"
Server: Microsoft-IIS/10.0
X-Powered-By: ASP.NET
Date: Thu, 11 Apr 2019 13:59:43 GMT
Content-Length: 124

<html>
  <head>
    <meta charset="utf-8">
  </head>
  <body>
    <p>test 1</p>
    test2
  </body>
</html>
tests

解释:

  1. 第一行一如既往地是状态行
  2. Last-Modified表示这个请求的文件最后一次修改的时间,注意时区问题
  3. Content-Length表示所请求的文件的长度
  4. Date是服务器收到请求的时间,注意时区问题
  5. 一个空行之后就是原模原样的那个文件