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

Posted

技术标签:

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

:

$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); 别的 回声“无”;

我做错了什么?

【问题讨论】:

请在谷歌上搜索并按照步骤操作。我相信你一定能弄明白的。 【参考方案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';

【讨论】:

以上是关于php + curl 问题资源 id #2 on curl_init的主要内容,如果未能解决你的问题,请参考以下文章

如何使用PHP获取实例ID

curl抓取网页内容php

php curl数据传输神器

php curl数据传输神器

php curl数据传输神器

php CURL