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

对于一个URL https://zhuanlan.zhihu.com/xmucpp

(1)首先浏览器解析出主机名:http://zhuanlan.zhihu.com

(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中查看客户端访问的具体信息了(具体操作步骤同上文一样)

时间: 2024-12-16 13:18:05

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

Python爬虫|深入请求(四)常见的反爬机制以及应对方法

作者:David Qian 链接:https://zhuanlan.zhihu.com/p/21558661 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 大家好!我是厦门大学王亚南经济研究院的大一学生,今天将由我来为大家介绍一下常见的反爬机制以及应对方法. 注:非商业转载注明作者即可,商业转载请联系作者授权并支付稿费.本人已授权"维权骑士"网站(http://rightknights.com)对我在知乎发布文章的版权侵权行为进行追究与维权. ---

Python爬虫知识点——请求

请求 :请求方法.请求网址.请求头.请求体 请求方法: 常见的为:GET.POST GET与POST主要区别: GET请求参数包含在URL,可从URL中看出.POST请求的URL不包含参数,都是通过表单的形式传输的,包含在请求体中 GET请求提交的数据最多只有1024字节,POST无限制 其他还有HEAD.PUT.DELETE.CONNECT.OPTIONS.TRACE 请求的网址: 即URL,我们想要请求的资源 请求头: 用来说明服务器要使用的附加信息,比较总要的有Cookie.Referer

python爬虫5--requests请求库

使用该库需先安装,能更方便的处理Cookies,登录验证,代理设置等. urllib中urlopen()实际是以GET方法请求网页,requests中响应的方法为get(),另外还可用post(),put(),delete()等方式实现POET,PUT,DELETE等请求. 1 普通用法 1.1 GET请求 如果网页返回的是JSON格式,可以调用json()方法转变成字典格式. 1.2 POST请求  1.3 属性 requests的属性: text和content:响应的内容: status_

Python爬虫最为核心的HTTP协议解析,及自定义协议的分析!

机器之间的协议就是机器通信的语法,只有按照这种语法发来的信息,机器之间才能相互理解内容,也可以理解为信息的一种格式. HTTP/IP协议是互联网最为重要的协议,没有HTTP/IP协议,也就没有互联跟不会有网,对于爬虫而言一切数据.请求都是围绕HTTP协议展开.但是在python实现的网络爬虫中都是使用封装好了的请求库如:requests.scrapy.urllib等,这些是对socket的封装,而socket是除了机器语言外最底层的协议. HTTP是公认的协议,但是并不是所有的终端通信都使用HT

小白学 Python 爬虫(32):异步请求库 AIOHTTP 基础入门

人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Linux基础入门 小白学 Python 爬虫(4):前置准备(三)Docker基础入门 小白学 Python 爬虫(5):前置准备(四)数据库基础 小白学 Python 爬虫(6):前置准备(五)爬虫框架的安装 小白学 Python 爬虫(7):HTTP 基础 小白学 Python 爬虫(8):网页基

Python爬虫请求头解析

Python爬虫请求头解析 Accept:本次请求可以接受的内容: Accept-Encoding:可以接受的数据编码的类型: Accept-Language:可以接受的语言类型: Cookie:保存用户状态的登录状态信息(身份证): Host:保存请求的主机地址: Referer:告诉服务器从哪里来(从哪个网站过来的): See-Fetch-Mode/Site/User:用户的一些配置信息(不重要,对爬虫没有影响): Upgrade-Insecure-Request:本次请求是否安全(1为安全

Python伪装浏览器请求爬虫豆瓣小组

Python爬虫,下载豆瓣小组图片 # -*- coding: utf-8 -*- # ----------------------------------------------- # 程序:豆瓣小组图片爬虫 # 版本:1.0 # 语言:Python 3.4 # 作者:gdp12315 # 操作:输入豆瓣小组讨论版块地址.起始页面.终止页面 # 功能:下载小组帖子里发布的图片 # 注意:下载的保存地址为作者本机地址 读者根据自身情况更改 # --------------------------

python爬虫基础01-HTTP协议

深入浅出了解HTTP协议 HTTP(HyperText Transfer Protocol,超文本传输协议)是互联网上应用最为广泛的一种网络协议.目前使用最普遍的一个版本是HTTP 1.1. HTTP协议是用于从WWW服务器传输超文本到本地浏览器的传送协议.它可以使浏览器更加高效,使网络传输减少.它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等. HTTP协议简介 HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端-服务

Python爬虫实例

前言 Python非常适合用来开发网页爬虫,理由如下:1.抓取网页本身的接口相比与其他静态编程语言,如java,c#,c++,python抓取网页文档的接口更简洁:相比其他动态脚本语言,如perl,shell,python的urllib2包提供了较为完整的访问网页文档的API.(当然ruby也是很好的选择)此外,抓取网页有时候需要模拟浏览器的行为,很多网站对于生硬的爬虫抓取都是封杀的.这是我们需要模拟user agent的行为构造合适的请求,譬如模拟用户登陆.模拟session/cookie的存