PHP通过CURL请求外部ASP表单获取数据失败求助
用cURL获取该ASP表单数据的可行方案
嘿,我帮你梳理下搞定这个ASP表单的思路——这类ASP驱动的站点,表单提交依赖会话状态和一堆隐藏字段,直接瞎POST肯定失败,咱们一步步来解决:
第一步:先抓初始页面的会话Cookie和隐藏参数
ASP站点第一次访问会给你分配ASPSESSIONID这类会话Cookie,同时页面里的表单藏着__VIEWSTATE、__VIEWSTATEGENERATOR、__EVENTVALIDATION这些必填参数,没它们服务器根本不认你的请求。
先用cURL把初始页面拉下来,顺便存好Cookie:
# 把Cookie存在cookies.txt,页面内容存到page.html方便后续提取参数 curl -c cookies.txt -o page.html https://www.dovera.sk/overenia/dlznici/zoznam-dlznikov
然后从page.html里扒那几个隐藏字段的值,用grep/awk就能搞定:
# 提取__VIEWSTATE VIEWSTATE=$(grep -o '__VIEWSTATE" value="[^"]*' page.html | cut -d '"' -f 4) # 提取__VIEWSTATEGENERATOR VIEWSTATEGENERATOR=$(grep -o '__VIEWSTATEGENERATOR" value="[^"]*' page.html | cut -d '"' -f 4) # 提取__EVENTVALIDATION EVENTVALIDATION=$(grep -o '__EVENTVALIDATION" value="[^"]*' page.html | cut -d '"' -f 4)
第二步:构造完整的POST请求提交数据
现在带着刚才存的Cookie,加上提取到的隐藏参数,再填上你要查的36471224,就能构造出合法的请求了。注意:输入框和提交按钮的name要和页面源码里的完全一致(我大概猜了一个,你最好自己去浏览器开发者工具里确认):
curl -b cookies.txt -c cookies.txt -X POST \ -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" \ -d "__VIEWSTATE=$VIEWSTATE" \ -d "__VIEWSTATEGENERATOR=$VIEWSTATEGENERATOR" \ -d "__EVENTVALIDATION=$EVENTVALIDATION" \ -d "ctl00$ContentPlaceHolder1$txtICO=36471224" \ -d "ctl00$ContentPlaceHolder1$btnHladat=Hľadať" \ https://www.dovera.sk/overenia/dlznici/zoznam-dlznikov
关键细节提醒:
- 一定要确认输入框的name:打开浏览器F12,找到输入
36471224的那个框,看它的name属性是什么,替换上面的ctl00$ContentPlaceHolder1$txtICO。 - 提交按钮的
name和值也要对应:比如按钮上的文字是“Hľadať”,那参数里的值也要和它一致。 - 加上
-A模拟浏览器UA:有些站点会拦截非浏览器的请求,加这个能避免被挡。
偷懒的小技巧
如果你嫌手动提取参数麻烦,直接用浏览器开发者工具抓包:
- 手动在页面输入
36471224并提交 - 打开Network标签,找到提交的POST请求
- 右键请求 → 复制 → 复制为cURL(bash)
- 把复制出来的命令直接在终端跑,肯定能拿到结果,之后再根据需要把参数改成变量就行。
内容的提问来源于stack exchange,提问作者Lubo
相关产品推荐
相关产品推荐

