CasperJS爬虫Ajax POST请求标题数据未发送问题求助
解决CasperJS POST标题数据失败的问题
嘿,我之前做爬虫的时候也碰到过类似的坑!状态码200但数据没传过去,大概率是细节没处理好,咱们来一步步排查:
可能的问题点&解决方案
1. 标题内容的特殊字符没转义
如果爬取到的标题里包含引号、换行、HTML实体(比如&、<)这类字符,直接POST会破坏数据结构,导致PHP端无法正确解析。
修正方案:用encodeURIComponent()对标题做转义处理:
var casper = require('casper').create(); casper.start("https://www.google.com/"); casper.then(function(){ // 先正确获取标题 var pageTitle = this.getTitle(); // 转义特殊字符 var encodedTitle = encodeURIComponent(pageTitle); var data = { title: encodedTitle, // 其他正常数据... }; // 发送POST请求 this.open('your-php-file.php', { method: 'post', data: data }); }); casper.run();
2. 标题获取方式不正确
你代码里写的this.e...没写完,会不会是获取标题的方法错了?比如是不是应该用this.getTitle(),而不是自己去DOM里提取?如果是手动提取DOM元素,可能会拿到空值或者不完整的内容。
验证方法:在获取标题后加个日志打印,确认内容是否正确:
var pageTitle = this.getTitle(); this.echo('爬取到的标题:' + pageTitle); // 看看控制台输出的标题是不是你要的
3. PHP端接收字段不匹配
检查PHP里接收标题的字段名和CasperJS里传的是不是完全一致!比如CasperJS传的是title,PHP里是不是写成了$_POST['Title'](大小写敏感)?或者有没有拼写错误?
PHP端示例:
<?php // 先打印所有POST数据,确认有没有收到title var_dump($_POST); $title = isset($_POST['title']) ? urldecode($_POST['title']) : ''; // 记得解码转义后的内容 // 然后插入数据库... ?>
4. POST数据格式错误
如果你的POST请求是用JSON格式发送的,那PHP端不能直接用$_POST接收,得用file_get_contents('php://input')来读取原始请求体,再解析成JSON:
CasperJS JSON格式POST示例:
this.open('your-php-file.php', { method: 'post', headers: { 'Content-Type': 'application/json' }, data: JSON.stringify({ title: pageTitle, // 其他数据... }) });
PHP端JSON解析示例:
<?php $rawData = file_get_contents('php://input'); $data = json_decode($rawData, true); $title = isset($data['title']) ? $data['title'] : ''; // 插入数据库... ?>
先从这几个方向排查,应该能解决问题!
内容的提问来源于stack exchange,提问作者Nadeem Ahmad
相关产品推荐
相关产品推荐

