0

我正在尝试抓取网站以提取 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

提前感谢您的任何见解。

4

1 回答 1

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 方法完成的,如果当前登录的用户有权执行我作为 POST 参数发送的操作并且它正在工作,则返回 true 或 false。(我正在传递会话信息 cookie)。

于 2013-04-15T12:44:17.147 回答