python3爬虫系列

聚沙成塔--爬虫系列(十七)(初识http协议)

2017-11-14  本文已影响5人  爱做饭的老谢

版权声明:本文为作者原创文章,可以随意转载,但必须在明确位置标明出处!!!

tips:本基础系列旨在以爬虫带大家入门Python语言

本基础系类讲到这里基本将Python的用法囊括了,正则表达式、元组、列表、生成器、文档操作、数据库操作、多线程、多进程。我默认那些从第一篇开始看的初学者已经基本学会使用Python这门语言了,那么到了本章老谢觉得很有必要讲一下HTTP协议了,前面的爬虫程序我们是用了一个request的函数去从服务器上请求的数据,但我们只知其然、不知其所以然。所以本篇文章有必要让大家知道其所以然,网络中的数据是如何在万维网中交互的。

HTTP

Hypertext Transfer Protocol(HTTP)超文本传输协议,它是基于TCP/IP协议,它可以用来传输数据、文件、图片等等,默认端口为80端口,TCP/IP协议本章不做介绍,有兴趣了解的可以看我的个人博客TCP协议总结这篇文章。它是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议,它也是一个无状态的传输协议。这里需要理解两个概念,客户端(Web Client)、服务端(Web Server),客户端是指我们电脑上的浏览器,想Chrome、Firefox、IE等都叫做客户端。服务端是指提供服务的一端,就像我们通过网址去访问服务一样,这个网址(URL)对应的就是服务端。HTTP协议的工作模式可以概括如下:

基本特征

协议内容

在正式开讲协议之前我们先看一下先看一下一个请求和一个应答都包含了哪些信息,前面的章节提到过怎么查看协议内容。


Request Headers请求头

GET / HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: en,zh-CN;q=0.8,zh;q=0.6
Cookie: BAIDUID=0C80846E213536DBC9C41F0B0E71B9A6:FG=1; BIDUPSID=0C80846E213536DBC9C41F0B0E71B9A6; PSTM=1478063602; BDUSS=FjYlR5SExlU1NyUjcxNzRCalJLS35ZRWN0b2JlblJjdjZ2dUd0OTlJa3ZwQUphSVFBQUFBJCQAAAAAAAAAAAEAAAAg-Vcjc2Fuc2hhbzEzMTQyNDYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8X21kvF9tZSH; MCITY=-%3A; ispeed_lsm=2; cflag=15%3A3; BDRCVFR[-2cV2yayoy0]=Za_Pf0_zypmn1RvnHc1QhPEUf; BD_CK_SAM=1; PSINO=3; H_PS_645EC=aa7c2bmMU3Y8IU8%2Ff2G1H5%2FtV9meG4Iy2kIdCT4go1wXWeYOZo0%2FhbAGB5EvFk%2FCVpTJfv6u; BDORZ=FFFB88E999055A3F8A630C64834BD6D0; BD_HOME=1; H_PS_PSSID=1425_24566_12897_21113_18560_17001_24880_20719; BD_UPN=12314753

Response Headers应答头

HTTP/1.1 200 OK
Cache-Control: private
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html;charset=utf-8
Date: Thu, 09 Nov 2017 08:07:24 GMT
Expires: Thu, 09 Nov 2017 08:07:24 GMT
Server: BWS/1.1
Set-Cookie: BDSVRTM=279; path=/
Set-Cookie: BD_HOME=1; path=/
Set-Cookie: H_PS_PSSID=1425_24566_12897_21113_18560_17001_24880_20719; path=/; domain=.baidu.com
Strict-Transport-Security: max-age=172800
X-Ua-Compatible: IE=Edge,chrome=1
Transfer-Encoding: chunked

HTTP/1.1方法

HTTP/1.1提供了以下几种方法

方法名 描述
GET 请求指定的页面信息,并返回实体主体。
HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
PUT 客户端向服务器传送的数据取代指定的文档的内容。
DELETE 请求服务器删除指定的页面。
CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS 允许客户端查看服务器的性能。
TRACE 回显服务器收到的请求,主要用于测试或诊断。

GET & POST

GET和POST方法是最常用的两个方法,它们的区别如下

okay,本篇文章到这里就介绍了,下一篇文章将用原生的socket去实现其中的几种方法,顺带把Python的网络编程讲了,光说不练都是假把式对吧。


欢迎关注我:「爱做饭的老谢」,老谢一直在努力...

上一篇 下一篇

猜你喜欢

热点阅读