PHP curl 抓取 AJAX 异步请求数据完整指南
很多网页内容通过 AJAX 技术动态加载,直接抓取 HTML 源码无法获取这些数据。解决这一问题的关键是通过开发者工具找到真实的异步请求地址和参数,然后使用 cURL 模拟提交。
分析与准备
AJAX(Asynchronous JavaScript and XML)本质上是一次独立的 HTTP 请求。要抓取这些内容,我们需要先定位其后台服务地址。通常可以使用 Firebug 或现代浏览器的“网络(Network)”开发者工具来拦截和分析这些请求。
在浏览器中打开包含异步内容的页面,查看请求响应。此时你可能只会看到返回的 JS 代码、XML 数据或 JSON 对象,而不是渲染后的完整页面结构。这就是我们需要解析的目标数据。
确定接口的请求方法(通常是 GET 或 POST)、URL 以及所需的全部参数(如 callCount、sessionid、业务 ID 等)。如果该接口依赖于登录状态,还需要记录相应的 Session Cookie。
操作顺序
第1步:获取并保存会话 Cookie
由于很多异步接口需要通过 Cookies 验证身份或维持会话,第一步是访问基础页面以获取有效的 Cookie,并将其保存到本地文件中供后续请求使用。
$cookie_file = tempnam('./temp','cookie'); // 创建临时文件存储Cookie
$ch = curl_init();
$url1 = "http://www.cdut.edu.cn/default.html";
curl_setopt($ch,CURLOPT_URL,$url1);
curl_setopt($ch,CURLOPT_HTTP_VERSION,CURL_HTTP_VERSION_1_1);
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch, CURLOPT_ENCODING ,'gzip'); // 处理gzip压缩
// 设置连接结束后保存cookie信息的文件
curl_setopt($ch,CURLOPT_COOKIEJAR,$cookie_file);
$content=curl_exec($ch);
curl_close($ch);
第2步:构造并发送异步 POST 请求
根据上一步分析出的参数,拼接 POST 数据字符串。确保传入正确的业务参数(如文章分类ID、页数等),并利用之前生成的 Cookie 文件进行身份认证。
$ch3 = curl_init();
// AJAX 异步请求的真实后端接口
$url3 = "http://www.cdut.edu.cn/xww/dwr/call/plaincall/portalAjax.getNewsXml.dwr";
// 完整的POST参数字符串(注意&需转为 & 或 %26,视编码方式而定)
$curlPost = "callCount=1&page=/xww/type/1000020118.html&httpSessionId=...&scriptSessionId=...&c0-scriptName=portalAjax&c0-methodName=getNewsXml&c0-param0=string:xxx...";
curl_setopt($ch3,CURLOPT_URL,$url3);
curl_setopt($ch3,CURLOPT_POST,1);
curl_setopt($ch3,CURLOPT_POSTFIELDS,$curlPost);
// 读取之前保存的cookie进行验证
curl_setopt($ch3,CURLOPT_COOKIEFILE,$cookie_file);
// 执行请求
$content1 = curl_exec($ch3);
curl_close($ch3);
结果判断
变量 $content1 中现在应该包含了服务端返回的 XML 或文本数据。你可以进一步使用 PHP 内置的 DOMDocument 或其他解析库来处理这段字符串,将其转换为结构化数据或提取出需要的字段。
简要总结
以上就是利用 PHP cURL 进行 AJAX 异步内容抓取的详细内容,更多关于 PHP 高级网络编程的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













