Python中pyspider模拟请求无法抓包问题如何解决?[求助帖]
请问 pyspider 模拟的 run 请求为什么没办法通过抓包得到呢? 我看代码中貌似是使用了 webdav 协议的一个类? 然后就是正常使用 tornado 的请求了, 不太清楚具体原理。求大佬告知
Python中pyspider模拟请求无法抓包问题如何解决?[求助帖]
1 回复
这个问题通常是请求头或SSL验证导致的。直接上代码,用requests库的Session对象配合正确headers就能解决:
import requests
from requests.adapters import HTTPAdapter
from urllib3.poolmanager import PoolManager
import ssl
class SSLAdapter(HTTPAdapter):
def init_poolmanager(self, *args, **kwargs):
ctx = ssl.create_default_context()
ctx.set_ciphers('DEFAULT@SECLEVEL=1') # 降低SSL安全级别
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
kwargs['ssl_context'] = ctx
return super().init_poolmanager(*args, **kwargs)
# 创建会话并设置适配器
session = requests.Session()
session.mount('https://', SSLAdapter())
# 设置完整的请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
'Accept-Encoding': 'gzip, deflate, br',
'Connection': 'keep-alive',
'Upgrade-Insecure-Requests': '1'
}
try:
response = session.get(
'https://目标网站.com',
headers=headers,
timeout=10,
allow_redirects=True
)
print(f"状态码: {response.status_code}")
print(f"响应内容前500字符: {response.text[:500]}")
except requests.exceptions.SSLError as e:
print(f"SSL错误: {e}")
except requests.exceptions.RequestException as e:
print(f"请求异常: {e}")
关键点:
- 自定义SSLAdapter绕过证书验证
- 使用完整的浏览器请求头
- Session对象保持连接状态
如果还不行,可能是网站用了JavaScript渲染,得考虑用Selenium或Playwright。
一句话建议:检查请求头和SSL证书设置。

