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

  • 相关阅读:
    php面试题-2
    排序算法-1
    php面试题-1
    ES6基础-4
    ES6基础-3
    mysql优化-1
    ES6基础-2
    vuecli 项目进行gzip压缩 使页面加载速度更快
    vueCli3 项目创建时,git bash 箭头选择无效问题
    gulp4简单用法和问题总结
  • 原文地址:https://www.cnblogs.com/zhisy/p/7230898.html
Copyright © 2011-2022 走看看