Python爬虫学习:HTTP基本原理

文章目录

    • 一、HTTP和HTTPS
    • 二、HTTP请求过程
    • 三、请求
    • 四、响应

一、HTTP和HTTPS

  1. HTTP和HTTPS
http https
是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。 是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
  1. 区别
    HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全
a. https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
b. http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
c. http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
d. http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
  1. 注意
    虽然某些网站使用了HTTPS协议,但还是会被浏览器提示不安全,提示“您的连接不是私密连接”,因为虽然此时它的数据传输是经过SSL加密的,但是可能这个证书不被CA机构信任。如果要爬取这样的站点,则需要设置忽略证书的选项,否则会被提示SSL连接错误
  2. HTTP是应用层的协议;(无连接)每次连接只处理一个请求;(无状态)每次连接、传输都是独立的。

二、HTTP请求过程

  1. 模型图
    Python爬虫学习:HTTP基本原理_第1张图片
    我们在浏览器中输入一个URL,回车之后便会在浏览器中观察到页面内容。
    实际上这个过程浏览器向网站所在的服务器发送了一个请求,网站服务器接收到这个请求后进行处理解析,然后返回对应的响应,接着传回给浏览器
  2. 使用Chrome浏览器的开发者模式下的Network监听组件演示:
    Python爬虫学习:HTTP基本原理_第2张图片
名称 含义
Name 请求的名称,一般会将URL的最后一部分内容当做名称
Method 请求的方法
Status 响应的状态码,这里显示200代表响应正常。通过状态码可以判断发送了请求是否得到了正常的响应
Type 请求的文档类型,document代表请求的是一个HTML文档,内容就是一些HTML代码
Initiator 请求源,用来标记请求是哪个对象或进程发起的
Size 从服务器下载的文件和请求的资源大小。如果是从缓存中取得的资源,则该列会显示from cache
Time 发起请求到获取响应所用的总时间

点击一个具体的条目
Python爬虫学习:HTTP基本原理_第3张图片

名称 含义
General Request URL请求的URL;Request Method请求的方法;Status Code响应状态码;Remote Address远程服务器的地址和端口
Response Headers 响应头
Request Headers 请求头

三、请求

  1. 请求方法(GET和POST)
    (1)一般来说,登录时,需要通过提交用户名和密码,其中包含了敏感信息,使用GET方式请求的话,密码就会暴露URL里面,造成密码泄露,所以最好以POST方式发送。上传文件时由于文件内容比较大,也会选用POST方式。
    (2)GET请求的参数包含在URL里面,数据可以在URL里面,而POST请求的URL不会包含这些数据,数据都是通过表单形式传输的,会包含在请求体中。
    (3) GET请求提交的数据最多有1024字节,而POST方式没有限制
    (4)比较而言GET方法更安全,因为它只请求数据,不提交数据,而POST方法需要提交数据
  2. 请求头
名称 含义
Accept 请求报头域,用于指定客户端可接受哪些类型的信息(text/html)
Accept-Language 指定客户端可接受的语言类型()
Accept-Encodeing 指定客户端可接受的内容编码()
Host 用于指定请求资源的主机IP和端口号,其内容为请求URL的原始服务器或网关的位置。从HTTP1.1版本开始,请求必须包含此内容
Cookie 也常用作cookies,网站为了辨别用户进行会话跟踪而存储在用户本地的数据,主要功能是为了维持当前访问的会话
Referer 用来标识这个请求是从哪个页面发过来的,服务器可以拿到这一信息并做相应的处理,如做来源统计、防盗链处理等
User-Agent 简称UA,是一个特殊的字符串头,可以使服务器识别客户使用的操作系统及版本、浏览器及版本信息。做爬虫时加上此信息,可以伪装浏览器;如果不加可能会被识别为爬虫
Content-Type 互联网媒体类型,用来表示具体请求中的媒体类型信息
if-modified-since 在发送HTTP请求时,把浏览器端缓存页面的最后修改时间一起发到服务器去,服务器会把这个时间与服务器上实际文件的最后修改时间进行比较。如果时间一致,那么返回HTTP状态码304(不返回文件内容),客户端接到之后,就直接把本地缓存文件显示到浏览器中;如果时间不一致,就返回HTTP状态码200和新的文件内容,客户端接到之后,会丢弃旧文件,把新文件缓存起来,并显示到浏览器中。

if-modified-since 参考

四、响应

  1. 详细响应状态码参考
响应状态码 含义
2xx 成功
3xx 跳转
4xx 客户端错误
5xx 服务器错误

爬虫被识别,常见的响应码

403:Forbidden 服务器收到请求,但是拒绝提供服务
500:Internal Server Error 服务器发生不可预期的错误
503:Server Unavailable 服务器当前不能处理客户端的请求,一段时间后可能恢复正常

错误处理

400 Bad Request检查请求的参数或者路径
• 401 Unauthorized 如果需要授权的网页,尝试重新登录
• 403 Forbidden
	1. 如果是需要登录的网站,尝试重新登录
	2. IP被封,暂停爬取,并增加爬虫的等待时间,如果拨号网络,尝试重新联网更改
• 404 Not Found直接丢弃
• 5XX服务器错误,直接丢弃,并计数,如果连续不成功,WARNING 并停止爬取
  1. 响应头
名称 含义
Date 标识响应产生的时间
Last-Modified 指定资源的最后修改时间
Content-Encoding 指定响应内容的编码
Server 包含服务器的信息,比如名称、版本号等
Content-Type 文档类型,指定返回的数据类型是什么。如text/html代表返回HTML文档
Set-Cookie 设置cookies。响应头中set-cookie告诉浏览器需要将此内容放在cookies中,下次请求携带cookies
Expires 指定响应的过期时间,可以使代理服务器或浏览器将加载的内容更新到缓存中。如果再次访问时,就可以直接从缓存中加载,降低服务器负载,缩短加载时间

你可能感兴趣的:(Python,Http,#,Python,爬虫学习)