Python POST请求提交指定日期后响应仍返回默认当前日期问题求助
问题排查与解决方案
我来帮你分析下为什么提交的日期没生效,主要有两个核心问题:
1. 表单数据格式错误
你在请求头里设置了Content-Type: application/x-www-form-urlencoded,但实际发送的是用json.dumps()转换后的JSON字符串——服务器期望的是标准的表单编码数据,自然无法正确解析你提交的日期参数,只能返回默认的当前日期。
修正方法:直接把字典aaa传给data参数,requests库会自动帮你编码成符合要求的表单格式:
# 错误写法 r = requests.post(url, data= json.dumps(aaa), headers = bbb) # 正确写法 r = requests.post(url, data=aaa, headers=bbb)
2. 硬编码的javax.faces.ViewState已失效
JSF(JavaServer Faces)页面的javax.faces.ViewState是动态生成的,每次会话或页面刷新都会变化。你代码里硬编码的这个值大概率已经过期,服务器会判定你的请求无效,直接返回默认数据。
正确做法:先发送GET请求获取目标页面,从页面中提取最新的ViewState和其他动态生成的表单字段(比如j_idt202这类ID),再构造提交的表单数据。
完整修正示例代码
这里用BeautifulSoup来解析页面提取必要参数,记得先安装依赖:pip install beautifulsoup4
import requests from bs4 import BeautifulSoup url = "https://seffaflik.epias.com.tr/transparency/piyasalar/gop/ptf.xhtml" # 初始化会话,自动管理Cookie session = requests.Session() session.headers.update({ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36" }) # 第一步:GET页面获取ViewState和表单字段 response = session.get(url) soup = BeautifulSoup(response.text, "html.parser") # 提取ViewState view_state = soup.find("input", {"name": "javax.faces.ViewState"}).get("value") # 提取表单的核心ID(比如j_idt202,可能会动态变化) form_id = soup.find("form", {"id": "j_idt202"}).get("id") # 构造表单数据 form_data = { form_id: form_id, f"{form_id}:date1_input": "15.04.2020", f"{form_id}:date2_input": "17.04.2020", f"{form_id}:goster": "", f"{form_id}:dt_rppDD": "24", "javax.faces.ViewState": view_state } # 第二步:POST提交表单 post_response = session.post(url, data=form_data) print(post_response.text)
额外提醒
- 确保日期格式和页面输入框要求一致(你用的
dd.MM.yyyy是正确的,和页面显示格式匹配) - 尽量用
requests.Session管理会话,避免手动维护Cookie导致的各类问题
内容的提问来源于stack exchange,提问作者Nelman
相关产品推荐
相关产品推荐

