我正在尝试抓取一个网站,以便提取XHTML数据,以便在PHP中保存为变量。
该网站使用AJAX,这意味着我正在寻找的数据是在XMLHttpRequest之后使用http://website.com/ajax.php?mid=2&pid=4
我已尝试设置从Chrome和Firefox获得的请求标头(略有不同),并包括他们尝试使用curl_setop()
stream_context_create()
和file_get_contents()
选项,但数据仍然是没有归还。当我在Chrome中检查我的脚本的请求标头时,即使已将此方法设置为GET
,也会将该方法显示为POST
。它为cURL和流上下文都这样做。
该网站不需要登录,但我注意到它会将会话cookie作为请求的一部分发送,我也将其包含在HTTP请求中无济于事。
另外需要注意的一点是,从请求标头中删除Content-Length
值会立即返回空白页,而在超时之前将其保留加载大约一分钟,但这可能无关紧要。
我的问题是其他人有使用HTTP标头的PHP和AJAX请求的经验吗?为什么我在将GET
指定为POST
时看到了{{1}}请求?
提前感谢任何见解。
答案 0 :(得分:2)
这是一种在CURL中进行POST的方法:
<?php
session_start();
if( empty( $_SESSION ) ) {
header('Location: /directar/index.php/site/login/return/Test');
}
echo "Info de sesion:";
var_dump( $_SESSION );
$c = curl_init('http://ws048-nueva/directar/index.php/AccessTest/CheckAcess');
$parametros_post = 'action=verChau';
curl_setopt($c, CURLOPT_POST, true);
curl_setopt($c, CURLOPT_POSTFIELDS, $parametros_post);
curl_setopt($c, CURLOPT_VERBOSE, TRUE);
curl_setopt($c, CURLOPT_COOKIE, 'PHPSESSID=' . $_COOKIE['PHPSESSID']);
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
session_write_close();
$page = curl_exec ($c);
echo "<br>";
echo "<br>";
echo $page;
curl_close ($c);
if( $page === 'true' ) {
echo "<br>si";
}
else {
echo "<br>no";
}
?>
我这样做是为了在Yii中使用CheckAccess方法返回true或false如果当前登录用户有权执行我作为POST参数发送的操作,并且它正在工作。 (我正在传递会话信息cookie)。