在爬取一个网站的时候,fiddler 抓到的包是这样的;
首先发送一个 connect 隧道请求,然后是 OPTIONS 请求和 get 请求,
但超过一定时间段,隧道将会关闭
我的理解是网站是在隧道传输数据的,且超时会关闭
那我如何用 python 去实现这种方式的请求呢?
1
Delon 2020-08-13 10:19:37 +08:00
https
|
2
changwenrui2310 OP @Delon 怎么请求呢,直接 get 报 502
|
3
locoz 2020-08-13 10:48:58 +08:00 via Android
先 CONNECT 再操作那是 HTTPS 吧…先 OPTIONS 再 GET 是部分前端框架的默认操作,一些可以忽略,一些需要同样做一遍 OPTIONS,看情况弄就好了。
你如果直接 GET 报错就和它一样先 OPTIONS 一下,如果还不行,多半是你请求体里的其他参数有问题。 |
4
xingyue 2020-08-13 11:08:38 +08:00 via Android
@locoz options 一般是因为跨域浏览器自动发送的吧,请求库一般没有默认发送 options 请求的吧
|
5
locoz 2020-08-13 12:50:04 +08:00 via Android
@xingyue #4 没细究过具体原理,但是我印象中是有些跨域有、有些跨域没有,而且应该跟浏览器没有关系。
刚刚查了一下,这种情况叫预检请求,用来检测服务端是否支持跨域,所以有可能是部分前端框架会自动发送、部分不会?或者我见到的那些没有发的可能是被人为关闭了? |
6
xingyue 2020-08-13 12:55:02 +08:00 via Android
|
7
binux 2020-08-13 13:01:52 +08:00 via Android
我没见过除了代理能用 connect 请求的
|
8
imn1 2020-08-13 13:06:59 +08:00
你又不是写 socket,干嘛要考虑 connect ?
一般的请求模块已经处理了 connect 了,你需要做的是尽量模拟出浏览器环境,让服务器那边“觉得”你是浏览器访问 |
10
renmu123 2020-08-13 13:53:50 +08:00 via Android
options 没必要管,requests 可不用遵从浏览器规范
|