• HTTP状态码与爬虫


    简介

    99%的网络爬虫技术都要与HTTP协议打交道,而在打交道的过程中,你会发现很多好玩的事情。本文主要介绍那些常用的HTTP状态码是如何被反爬虫技术使用的。

    常用状态码与反爬虫

    2xx

    2xx系列状态码一般代表响应成功。

    200

    OK

    最常见的状态码,代表一切正常。

    202

    Accepted

    这个并不常见。原意为请求已经收到,不过服务端采用了异步处理的方式在处理,所以结果没有返回给你。

    206

    Partial Content

    当你访问的资源支持断点下载,并且你使用了Range头部的时候,服务端会返回206,然后你可以继续换下一个范围获取之后的数据。

    3xx

    资源重定向。需要根据返回头信息中的Location字段重新发起请求。

    301

    Moved Permanently

    资源 永久 重定向。注意是永久。最常见的比如网站升级了HTTPS,则当你使用HTTP访问的时候,会自动重定向到HTTPS的地址。

    302

    Found

    资源 临时 重定向。此种情况下,就不要改你的书签或者访问地址了,可能过一会儿临时地址就失效了。
    常见的情况是,某些网站首次访问会有个302跳转,进入某个中间页面做一些奇奇怪怪的操作。比如当你首次访问新浪微博的时候,会触发302跳转,通过JS添加一个访客的Cookie。

    304

    Not Modified

    资源没有改变。这个主要是用来优化网络流量传输的。一般我们访问某个网站时,会访问这个网站的多个页面,这些页面所使用的一些静态资源,比如CSS、JS文件等都是共用的,并且在浏览器内缓存。但为了避免服务端有更新,而客户端没有及时更新,所以每次打开一个网页,浏览器都会重新请求一下这个资源,如果资源没变,那么服务端不用返回资源内容,只要返回304就好了,然后浏览器就自动使用本地缓存。如果服务端资源内容改了,那么就返回200,同时返回新的资源内容。

    4xx

    4xx一般代表请求有问题。

    400

    Bad Request

    你的请求不知道哪里出了问题。一般是参数格式不对、Cookie不对等情况。

    401

    Unauthorized

    没有登录。一般网站会自动跳转到登录页面。某些服务会直接在页面弹窗出登录框,比如FTP服务。

    402

    Payment Required

    这个一点都不常用。不过很好玩。含义是:你所访问的资源是需要付费的。这个状态码设计的不错,不过真的有人会用吗?

    403

    Forbidden

    禁止访问。这个大概是除了200之外,在爬虫里面最常见的了 ⊙﹏⊙∥∣°,一般就是你的IP被封了。

    不过正常情况下,一般代表没有权限访问某个资源。

    404

    Not Found

    资源不见了。一般是资源失效、被删除了。某些情况下,也可能是你没权限...

    405

    Method Not Allowed

    请求方法不对。常见于对某个需要POST访问的资源使用了GET方法。小小提示一下:某些网站是不限制这个的,或者说做了兼容。你可以把需要POST发送的数据作为URL中的参数用GET的方式访问。

    413

    Payload Too Large

    请求体太长了。常见于上传文件过大的情况。

    414

    URI Too Long

    URL太长了。有个不成文的约定,URL长度不能超过1024。不过这个并非标准,各个网站、浏览器的实现也都不一致。所以出现这个情况一般代表你构造的URL有问题。为啥是你构造的,因为肯定是你构造的。如果不是你构造的,这个问题怎么可能被触发呢。
    还有个特殊情况,比如新浪微博在某些情况下会返回414来逗你,让你懵逼一会。你的请求没问题,只不过是被识别到你是个爬虫了。

    418

    I'm a teapot

    我是个茶壶。嗯,就是逗你玩。你已经被发现了。

    429

    Too Many Requests

    访问太频繁了。歇一会吧(或者换个代理),你已经被发现了。

    5xx

    5xx一般代表服务端有问题。

    这个就不分开说了,我也没仔细研究过区别。一般是后端代码有问题,处理请求出现了错误导致的。或者是网络不通等。

    不过,某些网站会有些迷之行为。明明是正常的请求、正常的响应,偏偏返回个501。

    总结一下

    常用状态码及其含义跟大家介绍了。

    但是,还有个重点:
    状态码只是规范,并非强制要求

    所以你会看到某些网站在状态码上搞事情。走的路多了,总会遇见鬼的。

    HTTP状态码含义全集

    https://developer.mozilla.org/en-US/docs/Web/HTTP/Status

  • 相关阅读:
    看net2.0头晕眼花,是不是该做个具体的程序呢
    安装SQLServer2000时,提示"以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装程序之前必须重新启动计算机"
    刚装的WIN7,用了一下午,记一下备忘
    不同系统开启和关闭fso的方法(转)
    希腊字母以及发音
    meta 标签的作用
    电信禁止路由上网的最佳破解方法(转)
    安装系统
    网络工程师笔记
    GHOST操作
  • 原文地址:https://www.cnblogs.com/dyfblog/p/13022266.html
Copyright © 2020-2023  润新知