欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

Curl 方法抓取页面时出现的问题,

程序员文章站 2022-04-24 08:42:38
...
前不久做了个成绩查询的代理系统,用curl方法模拟登录学校的教务系统(ASP写的,并且写的非常烂),进行抓取信息内容,再将内容进行展现。
之后学校的教务系统换新的了,是用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一并提交,就模拟成功了。。


真是非常感谢,马上结贴