【问题标题】:php + curl issue Resource id # 2 on curl_initphp + curl 问题资源 id #2 on curl_init
【发布时间】:2016-09-30 08:28:20
【问题描述】:

php + curl 问题资源 id #2 on curl_init:

$url = "https://example.com:4433/deviceservice/authorize?login=query"; // 网址 JSON $ch = curl_init($url); 回声 $ch; //写入资源id #2 如果($ch) { curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, TRUE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, TRUE); $json = curl_exec($ch); $json = json_decode($json); } 别的 { 回声“无”; }

我做错了什么?

【问题讨论】:

  • 请在谷歌上搜索并按照步骤操作。我相信你一定能弄明白的。

标签: php curl


【解决方案1】:

如果您不在使用 SSL 的主机上,则应绕过 SSL 验证

<?php
    $url = "https://example.com:4433/deviceservice/authorize?login=query"; 
    $ch = curl_init($url);
    echo $ch; //write Resource id # 2
    if( $ch )
    {
        curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        $json = curl_exec( $ch );
        $json = json_decode($json);
    } else {
        echo 'nothing';
    }

【讨论】:

  • 谢谢。我一直在尝试在我的 WAMP 本地服务器上修复 cURL。我以为它根本没有加载,我安装了很多不同的版本,尝试了各种修复但没有任何效果。然后我意识到 curl_init 函数有效,只有其余的没有。这是 SSL 验证问题。你为我节省了几个小时。
【解决方案2】:

尝试使用 curl_error($ch) 和 echo 来诊断错误

$ch= curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HEADER, 0);
)                                                                       
);     

$response = curl_exec($ch);
$err_status = curl_error($ch);
echo $err_status;
curl_close($ch);

【讨论】:

    【解决方案3】:

    curl_init 成功时返回 cURL 句柄,错误时返回 FALSE。 所以echo $ch; 会返回类似 Resource id #2 的东西。

    http://php.net/manual/en/function.curl-init.php

    你必须尝试这样的事情

    $url = "https://example.com:4433/deviceservice/authorize?login=query"; // URL JSON
    
    $ch = curl_init();
    
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, TRUE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, TRUE);
    $json = curl_exec( $ch );
    $json = json_decode($json);
    curl_close($ch);   
    
    if(empty($json)){
       echo 'nothing';
    }
    

    【讨论】:

      猜你喜欢
      • 2014-07-24
      • 1970-01-01
      • 2011-05-25
      • 1970-01-01
      • 2013-10-20
      • 1970-01-01
      • 1970-01-01
      • 2011-10-31
      • 2011-06-21
      相关资源
      最近更新 更多