使用Python requests.post()提交数据至textarea失败,无法查询域名归属
问题分析与解决办法
核心问题1:请求参数的键错误
你代码里__RequestVerificationToken=这个键多了个末尾的等号,正确的键名应该是__RequestVerificationToken,这个错误会导致服务器无法识别验证参数,直接忽略你的请求。
核心问题2:硬编码的验证Token无效
__RequestVerificationToken是服务器动态生成的,每次访问页面都会刷新,你写死的这个值早就失效了,必须先访问查询页面,从页面源码里提取最新的Token。
核心问题3:缺少必要请求头
网站会检查请求合法性,比如User-Agent要模拟浏览器标识,Referer要表明请求来源,还有Cookie需要和GET页面时保持一致,否则会被判定为非法请求。
修正后的代码示例
import requests from bs4 import BeautifulSoup # 目标地址 base_url = 'http://icp.chinaz.com/searchs' session = requests.Session() # 使用Session保持Cookie会话 # 第一步:先GET页面,获取Token和Cookie headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' } response = session.get(base_url, headers=headers) soup = BeautifulSoup(response.text, 'html.parser') # 提取页面中的验证Token token = soup.find('input', {'name': '__RequestVerificationToken'}).get('value') # 第二步:构造POST请求参数 data = { 'hosts': 'qq.com', 'btn_search': '查询', # 直接用中文,requests会自动编码,无需手动转成%E6%9F%A5%E8%AF%A2 '__RequestVerificationToken': token } # 第三步:发送POST请求 post_response = session.post(base_url, data=data, headers=headers) print(post_response.content.decode('utf-8'))
额外注意事项
- 必须使用
requests.Session()保持会话,这样GET获取的Cookie会自动带到POST请求里。 - 如果网站有反爬机制,后续可能需要处理验证码等逻辑,但当前先解决参数传递的核心问题。
- 提交按钮的文本直接用中文即可,requests会自动完成URL编码转换,不用手动处理。
内容的提问来源于stack exchange,提问作者赵天姿
相关产品推荐
相关产品推荐

