V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
changwenrui2310
V2EX  ›  问与答

Python 如何实现 connect 隧道请求?

  •  
  •   changwenrui2310 · 2020-08-13 10:02:20 +08:00 · 2061 次点击
    这是一个创建于 1570 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在爬取一个网站的时候,fiddler 抓到的包是这样的;

    首先发送一个 connect 隧道请求,然后是 OPTIONS 请求和 get 请求,

    但超过一定时间段,隧道将会关闭

    我的理解是网站是在隧道传输数据的,且超时会关闭

    那我如何用 python 去实现这种方式的请求呢?

    12 条回复    2020-08-13 13:56:21 +08:00
    Delon
        1
    Delon  
       2020-08-13 10:19:37 +08:00
    https
    changwenrui2310
        2
    changwenrui2310  
    OP
       2020-08-13 10:23:05 +08:00
    @Delon 怎么请求呢,直接 get 报 502
    locoz
        3
    locoz  
       2020-08-13 10:48:58 +08:00 via Android
    先 CONNECT 再操作那是 HTTPS 吧…先 OPTIONS 再 GET 是部分前端框架的默认操作,一些可以忽略,一些需要同样做一遍 OPTIONS,看情况弄就好了。
    你如果直接 GET 报错就和它一样先 OPTIONS 一下,如果还不行,多半是你请求体里的其他参数有问题。
    xingyue
        4
    xingyue  
       2020-08-13 11:08:38 +08:00 via Android
    @locoz options 一般是因为跨域浏览器自动发送的吧,请求库一般没有默认发送 options 请求的吧
    locoz
        5
    locoz  
       2020-08-13 12:50:04 +08:00 via Android
    @xingyue #4 没细究过具体原理,但是我印象中是有些跨域有、有些跨域没有,而且应该跟浏览器没有关系。
    刚刚查了一下,这种情况叫预检请求,用来检测服务端是否支持跨域,所以有可能是部分前端框架会自动发送、部分不会?或者我见到的那些没有发的可能是被人为关闭了?
    xingyue
        6
    xingyue  
       2020-08-13 12:55:02 +08:00 via Android
    binux
        7
    binux  
       2020-08-13 13:01:52 +08:00 via Android
    我没见过除了代理能用 connect 请求的
    imn1
        8
    imn1  
       2020-08-13 13:06:59 +08:00
    你又不是写 socket,干嘛要考虑 connect ?
    一般的请求模块已经处理了 connect 了,你需要做的是尽量模拟出浏览器环境,让服务器那边“觉得”你是浏览器访问
    locoz
        9
    locoz  
       2020-08-13 13:48:57 +08:00
    @xingyue #6 学到了,谢谢~原来是属于“简单请求”的就不会触发自动 OPTIONS
    renmu123
        10
    renmu123  
       2020-08-13 13:53:50 +08:00 via Android
    options 没必要管,requests 可不用遵从浏览器规范
    locoz
        11
    locoz  
       2020-08-13 13:55:36 +08:00
    @locoz #3 补充一下,既然这个 OPTIONS 属于浏览器自动发送的请求,那么它就完全可以被用于反爬。比如用是否先发送 OPTIONS 再发送其他请求;比如通过 Access-Control-Max-Age 来判断是否没有按照要求来,在时间范围内多次发送了 OPTIONS 。能想到的骚操作还是挺多的。

    所以最好还是按照同样的方式先发送 OPTIONS 再发送其他请求,并且按服务器要求的来处理,最大程度避免被识别。
    locoz
        12
    locoz  
       2020-08-13 13:56:21 +08:00
    @renmu123 #10 还是要管一下的,既然是浏览器自动发送的东西,那么就完全可以被用于反爬
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3007 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 00:13 · PVG 08:13 · LAX 16:13 · JFK 19:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.