使用cURL POST方法的问题

时间:2013-04-15 12:27:16

标签: php javascript ajax xhtml web-scraping

我正在尝试抓取一个网站,以便提取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}}请求?

提前感谢任何见解。

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)。