使用Python发送POST请求解析ASPX站点时URL被拒绝报错如何解决
ASPX站点POST请求失败修正方案
核心错误点
- 初始GET请求用了HTTP协议而非HTTPS,导致获取的ViewState等参数对应会话无效,同时Cookie协议不匹配,POST时无法正常携带会话标识
- POST提交表单时错误使用
params参数传递表单数据,params仅用于构造URL查询参数,POST表单数据必须使用data参数传递,这是请求被拒绝的核心原因 - 请求头键名不符合规范:
User_Agent需改为User-Agent(HTTP头统一使用短横线而非下划线),HTTP_ACCEPT需删除前缀改为Accept - 缺少ASP.NET站点常用的校验头
Referer,多数ASPX站点会校验该头防止跨站请求伪造,需设置为表单页面地址
修正后代码
from bs4 import BeautifulSoup import lxml from requests_html import HTMLSession import time s = HTMLSession() header_simple = { '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', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', 'Content-Type': 'application/x-www-form-urlencoded', 'Referer': 'https://prod.ceidg.gov.pl/CEIDG/CEIDG.Public.UI/Search.aspx' } # 修正为HTTPS请求 r = s.get('https://prod.ceidg.gov.pl/CEIDG/CEIDG.Public.UI/Search.aspx', headers=header_simple) soup_dummy = BeautifulSoup(r.content, "lxml") # 解析表单参数 viewstate = soup_dummy.select("#__VIEWSTATE")[0]['value'] viewstategen = soup_dummy.select("#__VIEWSTATEGENERATOR")[0]['value'] eventvalidation = soup_dummy.select("#__EVENTVALIDATION")[0]['value'] english = soup_dummy.select("#hfEnglishWebsiteUrl")[0]['value'] data = { '__VIEWSTATE': viewstate, '__VIEWSTATEGENERATOR': viewstategen, '__EVENTVALIDATION': eventvalidation, 'ctl00$MainContent$txtName': 'bank', 'ctl00$MainContent$cbIncludeCeased': 'on', 'ctl00$MainContent$btnSearch': 'Find', 'ctl00$hfAuthRequired': 'False', 'ctl00$hfEnglishWebsiteUrl': english, 'ctl00$stWarningLength': '30', 'ctl00$stIdleAfter': '1200', 'ctl00$stPollingInterval': '60', 'ctl00$stMultiTabTimeoutSyncInterval': '20' } time.sleep(3) # 修正为用data参数传递表单数据,而非params p = s.post('https://prod.ceidg.gov.pl/CEIDG/CEIDG.Public.UI/Search.aspx', data=data, headers=header_simple) print(p.content)
内容的提问来源于stack exchange,提问作者Nikita Alexandrov
相关产品推荐
相关产品推荐

