2013-04-15 32 views
0

我想抓取一个网站,以便提取XHTML数据以保存为PHP中的变量。使用cURL POST方法的问题

网站使用AJAX这意味着我正在寻求以下使用搜索串一个XMLHttpRequest返回数据如http://website.com/ajax.php?mid=2&pid=4

我试图设置从器和Firefox(其略有不同),并得到的请求头包括他们尝试curl_setop()stream_context_create()选项与file_get_contents(),但数据仍然没有被返回。当我在Chrome中检查脚本的请求标题时,它显示的方法为GET,即使它已设置为POST。它为cURL和流上下文都这样做。

该网站不需要登录,但我注意到它发送会话cookie作为请求的一部分,我也包含在HTTP请求中无济于事。

还有一点需要注意的是,从请求头中删除Content-Length值会立即返回一个空白页,而在超时前保持加载大约一分钟,但这可能是无关紧要的。

我的问题是有其他人有使用HTTP标头的PHP和AJAX请求的经验,为什么我看到GET请求时,我已指定此为POST

提前感谢任何见解。

+1

如果没有看到您尝试过的实际代码,我们无法真正给出见解。 – Jon

+0

请分享您的代码 –

+1

记得使用curl_setopt($ handle,CURLOPT_POST,1)。此外,服务器可能需要数据作为POST数据而不是URL中的参数,请使用CURLOPT_POSTFIELDS。 – anttir

回答

2

这是一种方法做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"; 
} 

?> 

这是由我完成使用checkAccess方法Yii中返回true或false如果当前登录的用户有权做的动作我作为POST参数发送,并且它正在工作。 (我正在传递会话信息cookie)。