php curl -k或--insecure,-X

Doo*_*Dah 39 php curl

使用PHP和curl,我需要通过代理连接到SSL安全站点,并忽略证书警告.我的curl命令行如下所示:

curl -k -u username:password -X GET https://someURL
Run Code Online (Sandbox Code Playgroud)

通过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);
Run Code Online (Sandbox Code Playgroud)

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

hek*_*mgl 69

要完全禁用ssl证书检查curl知道该选项CURLOPT_SSL_VERIFYPEER.如果设置为falsecertifcate,则将禁用检查.默认值为true,您必须添加:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
Run Code Online (Sandbox Code Playgroud)

PHP文档:

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);
Run Code Online (Sandbox Code Playgroud)

您还询问以下设置是否正常:

curl_setopt($ch, CURLOPT_PROXY, true);
Run Code Online (Sandbox Code Playgroud)

PHP文档:

通过隧道请求的HTTP代理.

意味着如果您使用代理,它接受代理地址,如'192.168.0.1:3128'.true在这种情况下没有意义

  • `如果禁用证书检查,则可以省略CURLOPT_SSL_VERIFYHOST设置.这不是真的.如果主机不匹配,则仍需要将CURLOPT_SSL_VERIFYHOST设置为false. (5认同)