2013-03-05 85 views
29

使用PHP & curl,我需要通过代理连接到SSL安全站点,并忽略证书警告。我的卷曲命令行看起来像这样:php curl -k或--insecure,-X

curl -k -u username:password -X GET https://someURL 

翻阅curl.php,我看到我认为是正确的选项设置。有了它们,我最终得到了如下结果:

$ch = curl_init("https://someURL"); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // Ignore cert errors? 
    curl_setopt($ch, CURLOPT_PROXY, true);   // Proxy true? 
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);    
    curl_setopt($ch, CURLOPT_USERPWD, "username:password");  
    $result = curl_exec($ch); 

但是,$ result总是返回false。我的密码有一个特殊的字符,“!”。也许我需要逃避它?除此之外,还有其他想法吗?

回答

51

要完全禁用ssl证书检查curl知道选项CURLOPT_SSL_VERIFYPEER。如果它设置为false,证书检查将被禁用。由于默认值是true,你必须补充:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 

PHP documentation

CURLOPT_SSL_VERIFYPEER FALSE从验证对方的证书停止卷曲。可以使用CURLOPT_CAINFO选项指定要验证的替代证书,也可以使用CURLOPT_CAPATH选项指定证书目录。从cURL 7.10开始默认为TRUE。从cURL 7.10开始安装默认软件包。

请注意,如果证书检查被禁用,您可以省略CURLOPT_SSL_VERIFYHOST设置。所以,下面的行可以删除:

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 

你还问,如果下面的设置就可以了:

curl_setopt($ch, CURLOPT_PROXY, true); 

PHP documentation

HTTP代理隧道请求通过。

表示如果您正在使用代理服务器,它接受代理地址如'192.168.0.1:3128'。 true在这种情况下是没有意义的

+0

@DanielStenberg是的,这是正确的。我的帖子的代理相关部分只是回答:'//代理真实?'。 (再看看这个问题) – hek2mgl 2013-03-06 12:01:26

+0

确实,谢谢。我对答案感到困惑,并且与问题没有很好的关联。可能在答案中可以稍微澄清一点,让像我这样的傻子更难做出错误结论...... – 2013-03-06 14:48:06

+0

@DanielStenberg编辑答案 – hek2mgl 2013-03-06 15:57:23