HTTP与HTTPS简介
HTTP协议(HyperText Transfer Protocal):
即超文本传输协议,是一种发布和接收HTML页面的方法.
HTTPS协议(HyperText Transfer Protocal over Secure Socket Layer):
可理解为HTTP的安全版,即在HTTP协议的基础上添加了SSL层.
SSL(Secure Sockets Layer安全套接子层):
主要用于WEB的安全传输,可以在传输层对数据进行加密.由netscape公司提出.
协议端口号:
HTTP:80
HTTPS:443
爬虫的工作原理:
网络爬虫的抓取过程可以理解为模拟浏览器操作的过程
浏览器的主要功能是向服务器发出请求,并在窗口中显示服务器返回的资源.
HTTP的请求与响应:
HTTP通信有两部分组成:客户端请求消息与服务器响应消息
浏览器发送HTTP请求的过程:
当用户在地址栏中输入一个URL并且回车的时候,浏览器会向HTTP服务器发送HTTP请求,HTTP请求最长用的是GET和POST方法
浏览器发送Request请求去获取服务器端的HTML文件,服务器则返回一个Response对象.
浏览器会分析Response中的HTML,发现其中会引用其它文件,如p_w_picpaths css js等,此时浏览器会再次请求去获取这些资源.
当所有的文件全部下载成功后,浏览器会根据HTML的语法结构组成最终的页面.
客户端HTTP请求:
客户端发送一个HTTP请求到服务器的格式为:
请求行| 请求头部 |空行 |请求数据
下图为请求报文的一般格式:
一个典型的HTTP请求示例:
GET https://www.douban.com/ HTTP/1.1Host: www.douban.comConnection: keep-alivePragma: no-cacheCache-Control: no-cacheUser-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3253.3 Safari/537.36Upgrade-Insecure-Requests: 1Accept: text/html,application/xhtml+xml,application/xml;q=0.9,p_w_picpath/webp,p_w_picpath/apng,*/*;q=0.8#Accept-Encoding: gzip, deflate, brAccept-Language: zh,en-US;q=0.9,en;q=0.8,zh-TW;q=0.7,zh-CN;q=0.6Cookie: bid=2MYBpxuz2yQ; __yadk_uid=bxInROHOuKKEb7tkiSiEZygLYuYP2kxO; gr_user_id=14916ea7-aee0-43ad-83ee-7a236df37d47; viewed="20451827_25861795"; _vwo_uuid_v2=C055442D3B3854F97DDE6AC4D757E5BC|34b0bccb8c4f1faab1336ba5e19cea3c; ll="108288"; _ga=GA1.2.310445079.1508424221; ps=y; push_noty_num=0; push_doumail_num=0; __utmv=30149280.14370; ap=1; __utmz=30149280.1509712941.8.4.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; _pk_ref.100001.8cb4=%5B%22%22%2C%22%22%2C1509723845%2C%22https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DMLpogEZkCppQDqzj-PhnXBPTzkvUx6DiIQSWuIdGr7pLuzgf-AdrA2UCWYNaYEjf%26wd%3D%26eqid%3Dfb0db111000170200000000359fc642a%22%5D; _pk_id.100001.8cb4=280d7bc2f732b51c.1508424213.8.1509723845.1509712941.; _pk_ses.100001.8cb4=*; __utma=30149280.310445079.1508424221.1509712941.1509723846.9; __utmc=30149280; __utmt=1; __utmb=30149280.1.10.1509723846
一般在抓出数据时,不对数据做压缩处理,即注释掉下面一行:
Accept-Encoding: gzip, deflate, sdch, br
请求方法:
HTTP请求有多种方法,但是最为常用的为GET 和 POST两种方法:
GET是从服务器上获取数据,POST是向服务器上传送数据
GET请求的参数都显示在浏览器网址上,HTTP服务器根据请求所包含的参数来产生响应内容,即GET请求的参数会成为URL的一部分.
POST请求参数存于请求体中(一般在表单中),消息长度没有限制而且以隐式的方式进行传送,通常用来向服务器提交信息量比较大的数据,请求的参数包含在"Content-Type"消息头中,指明该消息的媒体类型和编码.
一般不使用GET方式提交表单,因为可能显示的暴露敏感信息
常用的请求报头:
1.HOST(主机号及端口号):对应网址URL中的WEB名称和端口号,用于指定被请求资源的Internet主机号和端口号.
2. Connection(链接类型):表示客户端与服务器的连接类型
3. Upgrade-Insecure-Requests(升级为HTTPS请求):升级不安全的请求,意思会在加载HTTP资源时自动替换成HTTPS请求,让浏览器不再显示HTTPS页面中的报警
4.User-Agent(浏览器名称)
5.Accept(文件传输类型):指浏览器或其它客户端可以接受的MIME(多用途互联网邮件扩展)类型,服务器可以根据它判断并返回适当的文件格式.
Accept:*/*表示什么都可以接收
p_w_picpath/gif表示图片
6.Referer(页面跳转处):表明产生请求的网页来自于哪个URL,用户是从该Referer页面访问到当前请求的页面.这个属性可以用来跟踪WEB请求来自哪个页面,来源网站等.
有时会遇到下载某网站图片时,需要使用对应的referer ,否则无法下载图片,这是因为该网站做了防盗链,原理是根据referer判断是否是本网站的地址,如果是则可以下载,不是则拒绝.
7.Accept-Encoding(文件编解码格式):指浏览器可以接受的编码方式.编码方式不同于文件格式,它是为了对文件进行压缩以加快文件的传输速度.浏览器在接收到WEB响应之后先解码,然后再检查文件格式.
8.Accept-Language(语言种类):指出浏览器可以接受的语言种类,如en或en-us或zh-cn等.当服务器能够提供一种以上的语言版本时要用到.
9.Accept-Charset(字符编码):指浏览器可以接受的字符编码,如果在请求消息中没有设置这个域,缺省是任何字符集都可以接受.
10.Cookie:浏览器用这个属性向服务器发送cookie,cookie是在浏览器中寄存的小型数据体,它可以记录和服务器相关的用户信息,也可以用来实现会话功能.
11.Content-Type(post数据类型):POST请求里用来表示的内容类型
服务器端HTTP响应:
HTTP响应也由四个部分组成,分别是:状态行 消息报头 空行 响应正文
常见的状态码:
100-199:表示服务器成功接收部分请求,要求客户端继续提交其余请求才能完成整个处理过程
200-299:表示服务器成功接收请求并已经完成整个处理过程
300-399:为完成请求,客户需进一步细化请求.列如请求的资源已经移动到一个新地址(302表示所请求的页面已经临时转移至新的URL 307和304表示使用缓存)
400-499:客户端请求有误(404:服务器找不到相关页面 403服务器拒绝访问,权限不够)
500-599:服务器端出现错误,常用500(请求未完成 服务器未知情况)
Cookie和Session:
客户端和服务器之间的交互仅限于请求和响应,结束之后就会断开,下次交互会被认为是新的连接,为了让服务器记录此用户的状态,必须找一个地方来记录用户的信息
Cookie:通过在客户端记录的信息来确认身份
Session:通过在服务器端记录的信息来确认身份