You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Jupyter中POST表单数据失败:无法获取目标页面HTML

解决POST请求无法获取目标页面HTML的问题

看起来你遇到的核心问题是几个关键细节没处理好:动态验证令牌、会话保持,还有请求头的正确传递。我帮你一步步拆解并修正代码:

问题分析

  1. 静态的__RequestVerificationToken无效:这个令牌是服务器动态生成的,每次访问页面都会变化,你用固定的旧令牌会被服务器拒绝验证。
  2. 请求头配置错误且未传递:你第二个代码里的header有语法错误(user-agent的引号配对错误),而且POST请求时根本没把headers参数传进去。
  3. 未保持会话状态:表单提交依赖SessionId和Cookie,手动复制旧Cookie没用,得用会话对象自动管理。

修正后的代码

首先需要安装beautifulsoup4用来解析页面提取令牌:

pip install beautifulsoup4

然后是完整的脚本:

import requests
from bs4 import BeautifulSoup

# 初始化会话,自动管理Cookie和Session
session = requests.Session()
base_url = "https://ar.ec.universal-assistance.com"
form_url = f"{base_url}/cotizar-asistencia-al-viajero"
target_url = f"{base_url}/ofertas-asistencia-al-viajero"

# 第一步:GET表单页面,获取动态的__RequestVerificationToken和会话Cookie
response = session.get(form_url)
soup = BeautifulSoup(response.text, "html.parser")
# 从页面的隐藏输入中提取令牌
token = soup.find("input", {"name": "__RequestVerificationToken"})["value"]

# 准备表单数据,替换成最新的令牌
data = {
    '__RequestVerificationToken': token,
    'CCTLD': '.ar',
    'CodigoOrganizacion': "",
    'CodigoConvenio': "",
    'OcultarTipoViaje': 'false',
    'CantidadPasajeros': 1,
    'CantidadDias': 3,
    'Origen': 'ARGENTINA',
    'Destino': 'Centro america/Caribe',
    'TipoViaje': 'Un viaje',
    'FechaInicio': '20/06/2019',
    'FechaFin': '22/06/2019',
    'Edad1': 27,
    'Edad2': "",
    'Edad3': "",
    'Edad4': "",
    'Edad5': "",
    'Edad6': "",
    'Edad7': "",
    'Edad8': "",
    'Edad9': "",
    'Edad10': "",
    'Email': 'no@no.com',
    'Nombre': 'PEDRO',
    'Apellido': 'PEREZ',
    'CodigoArea': 800,
    'NumeroTelefono': 9997777,
    'dr': "",
    'cn': '(direct)',
    'cs': '(direct)',
    'cm': '(none)',
    'ck': '(not set 5)',
    'cc': '(not set 5)',
    'ua': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36',
    'ref': 'ar.ec.universal-assistance.com',
    'sr': '1366x768',
    'vp': '1366x728'
}

# 配置正确的请求头(去掉那些非标准的":authority"等字段,requests会自动处理)
headers = {
    "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
    "accept-language": "es-ES,es;q=0.9",
    "cache-control": "max-age=0",
    "content-type": "application/x-www-form-urlencoded",
    "origin": base_url,
    "referer": form_url,
    "upgrade-insecure-requests": "1",
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36"
}

# 第二步:提交POST请求
post_response = session.post(form_url, data=data, headers=headers)

# 第三步:获取目标页面的HTML(因为会话已经通过验证,直接GET即可)
target_response = session.get(target_url)
print(target_response.text)

关键说明

  • 会话对象requests.Session():自动保存和发送Cookie,确保会话状态一致,不用手动复制旧的Cookie值。
  • 动态提取令牌:每次访问表单页面都重新获取最新的__RequestVerificationToken,避免验证失败。
  • 简化请求头:去掉了浏览器开发者工具里显示的非标准字段(比如:authority、:method),这些requests会自动处理,手动添加反而可能出问题。
  • 跳转处理:提交POST后,会话已经处于验证状态,直接GET目标页面就能拿到你想要的HTML。

内容的提问来源于stack exchange,提问作者Alan Diaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:41:29