php curl -k 或 --不安全, -X

2022-08-30 10:44:26

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

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

通过卷曲.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。我的密码中有一个特殊字符,“!”也许我需要逃避它?除此之外,还有其他想法吗?


答案 1

要完全禁用 ssl 证书检查,curl 知道该选项 。如果它设置为证书,则检查将被完全禁用。由于默认值为 ,因此您必须添加:CURLOPT_SSL_VERIFYPEERfalsetrue

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

PHP 文档中:

CURLOPT_SSL_VERIFYPEERFALSE 可阻止 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);

PHP 文档中:

通过隧道传输请求的 HTTP 代理。

这意味着如果您使用的是代理,它接受类似“192.168.0.1:3128”的代理地址。 在这种情况下没有意义true


答案 2

推荐