【问题标题】:Curl returntransfer is empty, curl_getinfo "Error: 1"curl回传为空,curl_getinfo "Error: 1"
【发布时间】:2011-05-17 08:16:22
【问题描述】:

我尝试从需要用户身份验证的 IIS 服务器获取带有 curl 的页面。

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 末尾的“错误:1”是我唯一的提示。 该脚本适用于其他网站。

【问题讨论】:

  • 代码的哪一部分打印出包含http_code 的数组?

标签: php curl https string


【解决方案1】:

注意状态码,它是302 Found,表示页面正在发出重定向。试试:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

这将使 cURL 为您跟随重定向,并且应该解决此问题。

Error: 1 无关紧要,那只是因为你在做echo print_r()。)

【讨论】:

  • 我不明白你最后的评论。为什么echo print_r(curl_getinfo($ch)) 打印1?只是将true 转换为1 吗?
  • @Shawn 这是因为print_r() 回显数据,并返回true。当连接成 PHP 字符串时,true 变为 1。为了看得更清楚,你可以$x = print_r(curl_getinfo($ch)); echo '----'; echo $x;
  • 哦,当然。正确的方法是将print_r的第二个参数设置为true: echo print_r($whatever, true);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-06
相关资源
最近更新 更多