HTTP与Socket

一,HTTP与HTTPS

  • 应用架构

    • c/s 即 client server 客户端 服务端
    • b/s 即 browser server 浏览器 服务端
    • m/s 即 mobile server 移动端 服务端
  • HTTPS协议

    • http协议是基于tcp/ip协议的,而https是在http协议的基础之上,再加了一层SSL/TLS协议,数据在传输过程中是加密的
    • HTTPS协议的默认端口是443
  • HTTP请求流程

    • 一次http请求的基本流程是,有客户端向服务端发起一次请求(request), 而服务器在接收到以后返回给客户端一个响应(response)。所以一次完整的http请求包含请求和响应两部分
    • 默认的http协议端口为80端口
    • URL组成

    在这里插入图片描述

  • HTTP请求格式

    • 客户端发送一个HTTP请求到服务器的请求消息包括以下部分:请求行,请求头,空行和请求数据
      • 请求报文的一般格式

        在这里插入图片描述

  • HTTP请求方法(常用为 GET POST)

    • 1.0定义了三种请求方法:GET,POST和HEAD方法
    • 1.1新增了五种请求方法:OPTIONS,PUT,DELETE,TRACE和CONNECT方法
      • GET:负责获取数据或者将一些简短的数据放到URL参数中传递到服务器中,比POST更加高效和方便
      • POST:传递量大或者安全性要求高的数据的时候,最好使用POST进行传递
    • 请求正文通常是使用POST方法进行发送的数据,GET方法是没有请求正文的
  • HTTP请求头

    • 请求头

    名字 + : + 空格 + 值

    • Host

      指定的请求资源的域名(主机和端口号),HTTP请求必须包含HOST,否则系统会以400状态码返回

    • User-Agent

      简称UA,内容包含发出请求的用户信息,通常UA包含浏览者的信息,主要是浏览器的名称版本和所用的操作系统,只要是使用了基于HTTP协议的客户端软件都会发送UA,此为便是客户端所用设备的重要依据

    • Accept

      告诉服务器客户端可以接受那些类型的信息

    • Cookie

      Cookie信息

    • Cache-Control

      指定请求和响应遵循的缓存机制

    • Referrer

      页面跳转除,表名产生请求的网页来自与那个URL,用户是从该Referrer页面访问到当前请求的页面,这个属性可用来跟踪Wed请求来自那个页面,是从什么网站来的

    • Content-Type

      来具体表示请求中的媒体类型信息,如 text/html 代表HTML格式,image/gif 代表GIF图片,application/Json 代表 Json类型

    • Content-Length

      内容长度

    • Content-Range

      响应的资源范围。可以在每次请求中标记请求的资源范围,在断开连接重连时,客户端值请求该资源未下载的部分,而不是重新请求整个资源,实现断点续传。

    • Accept-Encoding

      指定所能接受的编码方式,通常服务器会对页面进行GZIP压缩后在输出一减少流量,一般浏览器均支持对这种压缩后的数据进行处理,但对于我们来说,若不想接受看到类似乱码的数据,可以指定不接受任何压缩处理,要求原样返回

    • Accept-Language

      指浏览器可以接受的语言种类 en,en-us指英语 zh,zh-cn指中文

    • Connection

      客户端与服务端链接类型,keep-alive:保持链接,close:关闭链接

  • HTTP响应

    • HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文

      • 状态行的状态码
      分类描述
      1**信息,服务器收到的请求,需要请求者继续执行操作
      2**成功,操作被成功接受并处理
      3**重定向,需要进一步的操作以完成请求
      4**客户端错误,请求包含语法错误或无法完成请求
      5**服务器错误,服务器在处理请求的过程中发生了错误
      • 响应的报头

        • Allow

          服务器支持那些请求方法(如GET,POST等)

        • Date

          表示消息发送的时间,时间的描述格式由rfc822定义。例如 Date:Mon,31Dec200104:25:57:GMT。Date描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区

        • Set-Cookie

          非常重要的header,用于打cookie发送到客户端浏览器,每写入一个cookie都会生成一个Set-Cookie

        • Expires

          指定Response的过期时间,从而不缓存它,重新从服务器获取,会更新缓存。过期之前使用本地缓存,降低服务器负载,缩短加载时间

        • Content-Type

          WEB服务器告诉客户端自己响应的对象的类型和字符集

  • HTTP协议的特点

    • HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间
    • HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型
    • HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快

#二,爬虫

  • 爬虫的难点主要为两个方向:
    • 数据的获取
    • 采集的速度
  • Cookie与session
    • Cookie
      • Cookie其实就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息。 服务器在接收到Cookie以后,会验证Cookie的信息,以此来辨别用户的身份。可理解为一个凭证
    • session
      • Session的目的则是,在一个客户从打开浏览器到关闭浏览器这个期间内,发起的所有请求都可以被识别为同一个用户。而实现的方式则是,在一个客户打开浏览器开始访问网站的时候,会生成一个cookie,SessionID,这个ID每次的访问都会带上,而服务器会识别这个SessionID并且将与这个SessionID有关的数据保存在服务器上。由此来实现客户端的状态识别。因此session是基于cookie的
      • Session与Cookie相反,Session是存储在服务器上的数据,只由客户端传上来的SessionId来进行判定,所以相对于Cookie,Session的安全性更高
      • 一般SessionID会在浏览器被关闭时丢弃,或者服务器会验证Session的活跃程度,例如30分钟某一个SessionID都没有活跃,那么也会被识别为失效

Socket

import socket
import re
#https://www.baidu.com/img/bd_logo1.png
s = socket.socket()

# 连接服务端 注意端口号的选择
s.connect(('www.baidu.com', 80))

#写入请求报文
request = 'GET /img/bd_logo1.png HTTP/1.0\r\nHost: www.baidu.com\r\n\r\n'

#向目标发起请求
s.send(request.encode())

#接受请求到的数据
data = s.recv(1024)

#定义一个空字节的变量
res = b''

#使用循环拼接接收到的数据
while data:
    res += data
    data = s.recv(1024)
print(res)

#保存请求到的数据(此处简单的下载了百度的logo并保存到本地)
with open('long.png', 'wb') as f:
    f.write(re.findall(b'\r\n\r\n(.*)', res ,re.S)[0])

在写如请求报文时 HTTP1.0与HTTP1.1 获取到的速度大不相同 此处留疑

存请求到的数据(此处简单的下载了百度的logo并保存到本地)
with open(‘long.png’, ‘wb’) as f:
f.write(re.findall(b’\r\n\r\n(.*)’, res ,re.S)[0])


在写如请求报文时 HTTP1.0与HTTP1.1 获取到的速度大不相同      此处留疑

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值