首页 >后端开发 >php教程 >Curl 方法抓取页面时出现的问题,

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

WBOY
WBOY原创
2016-06-23 13:51:191005浏览

    前不久做了个成绩查询的代理系统,用curl方法模拟登录学校的教务系统(ASP写的,并且写的非常烂),进行抓取信息内容,再将内容进行展现。
    之后学校的教务系统换新的了,是用JSP写的,添加了验证码这个功能,然后我获取到验证码,进行输入,然后用curl方法提交HTTP请求,可是抓取到的结果返回的都是 “数据库忙请稍候再试”,而我把URL打出来,直接输到地址栏是可以进入教务系统的;并且我用POSTMAN发生HTTP请求,GET、POST方法都能进入系统,唯独用PHP的CURL方法会出现“数据库忙”。。后来用ruby写了一段类似的代码,是用net:http的方法,同样也出了“数据库忙请稍后再试”,同样把URL复制到地址栏也能进入。。不知道问题所在。。求助。。
   下面上图。。
   

	echo $url.'<br>';	$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一并提交,就模拟成功了。。


真是非常感谢,马上结贴

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn