使用PHP& curl,我需要通过代理连接到SSL安全站点,并忽略证书警告。我的curl命令行如下所示:
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。我的密码中有一个特殊的字符,“!”。也许我需要逃避它?除此之外,还有其他想法吗?
答案 0 :(得分:63)
要完全禁用ssl证书检查curl知道选项CURLOPT_SSL_VERIFYPEER
。如果设置为false
证书,则将完全禁用检查。由于默认值为true
,您必须添加:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
CURLOPT_SSL_VERIFYPEER FALSE,以阻止cURL验证对等方的证书。可以使用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);
通过隧道请求的HTTP代理。
表示如果您使用代理,它会接受像'192.168.0.1:3128'这样的代理地址。 true
在这种情况下没有意义