Python下载ASP.NET表单后文件:提交表单时序列号未被识别
问题:ASP.NET表单提交时序列号未被后端识别
我尝试在Linux Shell中用常规curl提交ASP.NET表单,未能成功;用Python编写的代码也遇到了同样的问题。
我的操作步骤:
- 发送GET请求获取目标页面
- 解析页面HTML,提取
__VIEWSTATE、__VIEWSTATEGENERATOR和__EVENTVALIDATION这三个ASP.NET隐藏变量 - 携带上述变量及表单所需的其他值,发送POST请求提交表单
当前Python代码
#!/usr/bin/env python import httpx from selectolax.parser import HTMLParser client = httpx.Client() url = "https://soportefirmadigital.com/sfdj/dl.aspx" file = "ClientesLinux_DEB64_Rev25.zip" desc = "Usuarios Linux (DEB 64bits)" code = 1234 def main(): # GET请求获取页面并解析 html = HTMLParser(client.get(url).text) # 提取ASP.NET隐藏变量值 viewstategenerator = html.css_first("input#__VIEWSTATEGENERATOR").attributes['value'] eventvalidation = html.css_first("input#__EVENTVALIDATION").attributes['value'] viewstate = html.css_first("input#__VIEWSTATE").attributes['value'] # 构造表单数据 formdata = { "__EVENTTARGET": "ctl00$certContents$LinkButton3", "__EVENTARGUMENT": "", "__LASTFOCUS": "", "__VIEWSTATE": viewstate, "__VIEWSTATEGENERATOR": viewstategenerator, "__EVENTVALIDATION": eventvalidation, "ctl00$certContents$hiddenISO": file, "ctl00$certContents$hidden_ISO_URL": "-", "ctl00$certContents$ddlInstaladores": desc, "ctl00$certContents$txtDescripcion": "", "ctl00$certContents$txtSerialNumber": code, "ctl00$certContents$hiddenABID": "", "ctl00$certContents$chkConfirmo": "on", } # 提交表单 response = client.post(url, data=formdata) print(response.text) main()
预期错误结果
因为使用的是测试序列号,预期会返回无效序列号的提示:
... <span id="ctl00_certContents_lblErr" class="fieldErr" style="color:#C00000;">Su tarjeta tiene un número inválido, o bien, no está registrada para soporte. En caso de duda contacte a su Institución Emisora.</span> ...
实际错误结果
但实际返回的是要求输入序列号的提示,说明提交的序列号未被后端识别:
... <span id="ctl00_certContents_lblErr" class="fieldErr"><font color="#C00000">Debe digitar el número de serie de su tarjeta</font></span> ...
内容的提问来源于stack exchange,提问作者Tabo
相关产品推荐
相关产品推荐

