2011-05-17 22 views
1

我尝试从需要用户身份验证的IIS服务器获取curl页面。Curl returntransfer为空,curl_getinfo“Error:1”

curl_exec什么都不返回,CURLOPT_RETURNTRANSFER为真。如果CURLOPT_RETURNTRANSFER为false,则curl_exec返回true。

有什么问题?该页面既不是在成功之后,也不是在认证失败之后是空的。

$username = $_POST["acc"]; 
$password = $_POST["pw"]; 
$url = "https://secure.website.com/"; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password"); 
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_FAILONERROR, true); 
$page = curl_exec($ch); 
echo "Error: " . print_r(curl_getinfo($ch)) . "<br>"; 
curl_close($ch); 

echo "<br>Page:<br>" . $page . "<br>---------------------------<br>"; 

脚本输出看起来是这样的:

Array ([url] => https://secure.website.com/ 
     [content_type] => text/html 
     [http_code] => 302 
     [header_size] => 435 
     [request_size] => 137 
     [filetime] => -1 
     [ssl_verify_result] => 20 
     [redirect_count] => 0 
     [total_time] => 0.187 
     [namelookup_time] => 0 
     [connect_time] => 0 
     [pretransfer_time] => 0.046 
     [size_upload] => 0 
     [size_download] => 0 
     [speed_download] => 0 
     [speed_upload] => 0 
     [download_content_length] => 0 
     [upload_content_length] => 0 
     [starttransfer_time] => 0.187 
     [redirect_time] => 0 
     [certinfo] => Array ()) 
     Error: 1 

Page: 

--------------------------- 

curl_error输出没有错误。 curl_getinfo末尾的“Error:1”是我唯一的暗示。 该脚本适用于其他网站。

+0

你的代码的一部分打印出与'http_code'数组中呢? – Shawn 2013-02-21 15:29:39

回答

5

请注意状态码,这是一个302 Found,这意味着页面正在发出重定向。尝试:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 

这将使cURL跟随你的重定向,并应该解决这个问题。

Error: 1是无关紧要的,这只是因为你正在做echo print_r()

+0

非常感谢。问题解决了。 – user756954 2011-05-17 08:51:26

+0

我不明白你最后的评论。为什么'echo print_r(curl_getinfo($ ch))'print'1'?它只是将'true'变成'1'吗? – Shawn 2013-02-21 15:16:49

+0

@Shawn这是因为'print_r()'回显数据,并返回true。当连接成一个PHP字符串时,'true'变成'1'。为了更好地看到它,你可以做'$ x = print_r(curl_getinfo($ ch));回声'----'; echo $ x;' – 2013-03-03 11:24:54