首页 > 代码库 > Python 爬虫|深入请求:http协议以及fiddler的使用

Python 爬虫|深入请求:http协议以及fiddler的使用

对于一个URL 

(1)首先浏览器解析出主机名:

(2)浏览器搜索出相应主机的ip地址(DNS)

(3)浏览器解析出相应的端口号

(4)建立与主机及特定端口的联系

(5)发送请求报文(记录请求行为的一些信息及要求)

(6)获得响应报文(包括你在浏览器上看到的信息)

(7)关闭连接

现在来看一看报文的具体结构,对于构造请求行为中的headers很有帮助,只需要大概了解就好,不需要特别深入~~

1)start lines:请求报文的起始行,或称为请求行。包含了一个方法和一个请求的URL。这个方法描述了服务器应该执行的操作,请求URL描述了要对哪个资源执行这个方法。请求行中还包含HTTP的版本,用来告知服务器,客户端使用的是哪种HTTP版本

请求方法        描述                   

GET     从服务器获取一份文档                   
HEAD    只从服务器获取文档的首部                 
POST    向服务器发送需要处理的数据               
PUT     将请求的主体部分存储在服务器上              
TRACE    对可能经过代理服务器传送到服务器上去的报文进行跟踪    
OPTIONS   决定可以在服务器上执行哪些方法              
DELETE   从服务器上删除一份文档                 

其中最常见的还是get和post(对应pythonrequests库中的requests.post, requests.get)

相信 大家对上图一定不陌生吧~对,这个404就是状态码

状态码是用来反映请求状态的数字,在python中可以用requests库中的status——code来实现

整体范围      已定义范围   分类
100-199      100-101    信息提示
200-299      200-206   成功
300-399      300-305   重定向(需要重新寻找URL)
400-499      400-415   客户端错误(构造URL或者posted data错误,被反爬等
500-599      500-505   服务器错误或者你自己的代理网关出现问题

2)header,仅列出一些与爬虫相关的参数(用于应对反爬),大部分可以直接复制:

host:提供了主机名及端口号

Referer 提供给服务器客户端从那个页面链接过来的信息(有些网站会据此来反爬)

Origin:Origin字段里只包含是谁发起的请求,并没有其他信息。跟Referer不一样的 是,Origin字段并没有包含涉及到用户隐私的URL路径和请求内容,这个尤其重要。

并且Origin字段只存在于POST请求,而Referer则存在于所有类型的请求。

User agent: 发送请求的应用程序名(一些网站会根据UA访问的频率间隔时间进行反爬)

proxies: 代理,一些网站会根据ip访问的频率次数等选择封ip

cookie: 特定的标记信息,一般可以直接复制,对于一些变化的可以选择构造(python中 的一些库也可以实现)

Accept首部为客户端提供了一种将其喜好和能力告知服务器的方式,包括他们想要什么, 可以使用什么,以及最重要的,他们不想要什么。这样服务器就可以根据这些额外信息,对要发送的内容做出更明智的决定。
首部            描述
Accept          告诉服务器能够发送哪些媒体类型
Accept-Charset      告诉服务器能够发送哪些字符集
Accept-Encoding     告诉服务器能够发送哪些编码方式(最常见的是utf-8)
Accept-Language     告诉服务器能够发送哪些语言

Cache-control: 这个字段用于指定所有缓存机制在整个请求/响应链中必须服从的指令

Public 所有内容都将被缓存(客户端和代理服务器都可缓存)

Private 内容只缓存到私有缓存中(仅客户端可以缓存,代理服务器不可缓存)

public max-age=xxx (xxx is numeric) 缓存的内容将在 xxx 秒后失效, 这个选项只在HTTP 1.1可用

No-store 不缓存

3)body 

HTTP的第三部分是可选的实体主体部分,实体的主体是HTTP报文的负荷。就是HTTP要传输的内容。(请求报文中可能的cookie,或者post data;响应报文中的html等)

HTTP报文可以承载很多类型的数字数据,图片、视频、HTML文档等。

除了用审查元素,开发者工具看报文之外,也可以利用强大的抓包工具,下面就来介绍一下fiddler的相关信息及使用

Fiddler是一款非常流行并且实用的http抓包工具,它的原理是在本机开启了一个 http 的代理服务器,然后它会转发所有的 http 请求和响应报文,显然是支持对手机等移动端进行抓包的。

当你启动了Fiddler,程序将会把自己作为一个微软互联网服务的系统代理中去。你可以通过检查代理设置对话框来验证Fiddler是被正确地截取了web请求。操作是这样的:点击IE设置,工具,局域网设置,最后点击高级。

作为系统代理,所有的来自互联网服务的http请求报文在到达目标Web服务器的之前都会经过Fiddle,同样的,所有的Http响应报文都会在返回客户端之前流经Fiddler。

操作界面:技术分享

 

操作界面的右上部分:

Statistics :统计选中的一个或多个请求相关数据,大小、耗时 (包括DNS搜寻,http握手,TCP/Ip连接等)

Inspectors:查看Request或者Response报文的详细消息

Auto Responder: 设置一些规则将符合规则的请求指向本地。

Composer:创建发送HTTP请求 (利用fiddler U-A)

Log:日志

Filters:设置会话过滤规则

Timeline:网络请求时间

下图所示的上半部分具体显示了请求报文的具体信息,下半部分显示了响应报文的信息:

技术分享在响应以及请求报文的上半部分有一些具体的参数(如下图所示)技术分享headers:显示消息中的header

json 用来格式化显示报文中的 json 数据(通常用于响应报文中)

cookie:直观地显示cookie参数

raw:用来显示报文的完整信息

查看这些参数,可以在python进行爬虫的时候更好的构造出 headers 信息,让python的爬虫行为更像浏览器行为,防止被反爬。

对手机等移动端进行抓包也很简单,只需要在tools-----fiddler options-----勾选allow remove computers to connect并设置好端口号-----然后让你的移动端访问相应的ip地址(在cmd中输入ipconfig即可查看本机ip)以及设置好的端口号,下载安全认证证书----在你的 wlan 设置里设置好相应的代理(ip地址以及port),这样配置就完成了。这样你就可以在fiddler中查看客户端访问的具体信息了(具体操作步骤同上文一样)

Python 爬虫|深入请求:http协议以及fiddler的使用