Curl 方法抓取页面时出现的问题,
程序员文章站
2022-05-15 11:17:02
...
前不久做了个成绩查询的代理系统,用curl方法模拟登录学校的教务系统(ASP写的,并且写的非常烂),进行抓取信息内容,再将内容进行展现。
之后学校的教务系统换新的了,是用JSP写的,添加了验证码这个功能,然后我获取到验证码,进行输入,然后用curl方法提交HTTP请求,可是抓取到的结果返回的都是 “数据库忙请稍候再试”,而我把URL打出来,直接输到地址栏是可以进入教务系统的;并且我用POSTMAN发生HTTP请求,GET、POST方法都能进入系统,唯独用PHP的CURL方法会出现“数据库忙”。。后来用ruby写了一段类似的代码,是用net:http的方法,同样也出了“数据库忙请稍后再试”,同样把URL复制到地址栏也能进入。。不知道问题所在。。求助。。
下面上图。。
代码没有加任何的其他setopt。。求大神指点指点。。是什么问题。。
回复1L:
一开始也觉得是UserAgent的问题,但是加了这句话依然是“数据库忙”
加了类似1楼的User Agent 的setopt,依然是“数据库忙"
也是如上图所示的“数据库忙”。。。
以上是登录成功的请求头
这是我模拟的请求头。。
以上是登录成功的请求头
这是我模拟的请求头。。
只看了你的url有验证码的参数,没有看到Cookie的处理,尝试在curl中添加cookie的相关参数。
之后学校的教务系统换新的了,是用JSP写的,添加了验证码这个功能,然后我获取到验证码,进行输入,然后用curl方法提交HTTP请求,可是抓取到的结果返回的都是 “数据库忙请稍候再试”,而我把URL打出来,直接输到地址栏是可以进入教务系统的;并且我用POSTMAN发生HTTP请求,GET、POST方法都能进入系统,唯独用PHP的CURL方法会出现“数据库忙”。。后来用ruby写了一段类似的代码,是用net:http的方法,同样也出了“数据库忙请稍后再试”,同样把URL复制到地址栏也能进入。。不知道问题所在。。求助。。
下面上图。。
echo $url.'
'; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); $content = curl_exec($ch); curl_close($ch); echo $content;
代码没有加任何的其他setopt。。求大神指点指点。。是什么问题。。
回复讨论(解决方案)
//USERAGENT 模拟一个试试curl_setopt($c,CURLOPT_USERAGENT,'Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; c8650 Build/GWK74) AppleWebKit/533.1 (KHTML, like Gecko)Version/4.0 MQQBrowser/4.5 Mobile Safari/533.1s');
估?判?了user agent,?主模?一?看看。
//USERAGENT 模拟一个试试curl_setopt($c,CURLOPT_USERAGENT,'Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; c8650 Build/GWK74) AppleWebKit/533.1 (KHTML, like Gecko)Version/4.0 MQQBrowser/4.5 Mobile Safari/533.1s');
回复1L:
一开始也觉得是UserAgent的问题,但是加了这句话依然是“数据库忙”
估?判?了user agent,?主模?一?看看。
加了类似1楼的User Agent 的setopt,依然是“数据库忙"
print_r(file_get_contents($url));
这样提示什么?
是有?奇怪,估?是header有些不同的。
print_r(file_get_contents($url));
这样提示什么?
也是如上图所示的“数据库忙”。。。
会不会是因为验证码的问题?
抓的包贴出来看看。
上个回复忘记打码了
抓的包贴出来看看。
以上是登录成功的请求头
这是我模拟的请求头。。
1、他有验证码,你是如何处理的
2、他有 cookie,也没看到你是如何处理的
抓的包贴出来看看。
以上是登录成功的请求头
这是我模拟的请求头。。
只看了你的url有验证码的参数,没有看到Cookie的处理,尝试在curl中添加cookie的相关参数。
要有curl的cookejar,和set opt header,网上搜搜这两个的用法应该就能够出结果了
感谢楼上各位的回复,已成功解决。
具体问题出在cookie上,原本以为 登录后才需要获取它的cookie,再进行后续操作,后来才发现获取验证码时会分配一个JSESSIONID(cookie),登录的时候需要将这个cookie一并提交,然后我就写了一个先是模拟访问
继续楼上未打完的部分:
写了一个先是模拟访问验证码地址的curl,取得cookie并保存,
然后显示验证码,提交表单,将postfileds,cookie一并提交,就模拟成功了。。
真是非常感谢,马上结贴
推荐阅读
-
windows下配置apache+php+mysql时出现问题的处理方法
-
JSP MySQL插入数据时出现中文乱码问题的解决方法
-
php curl post 时出现的问题解决
-
php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法
-
CentOS 7更新时出现:Multilib version problems问题的解决方法
-
mysql启动时出现ERROR 2003 (HY000)问题的解决方法
-
layui问题之渲染数据表格时,仅出现10条数据的解决方法
-
Angularjs在初始化未完毕时出现闪烁问题的解决方法分析
-
Python遍历zip文件输出名称时出现乱码问题的解决方法
-
node vue 开发环境部署时,外部访问页面出现: Invalid Host header 服务器域名访问出现的问题