48

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 を返します。パスワードに特殊文字「!」が含まれています。おそらく私はそれを逃れる必要がありますか?それ以外に、他のアイデアはありますか?

4

1 に答える 1

86

SSL 証明書のチェックを完全に無効にするには、curl はオプションを知っていますCURLOPT_SSL_VERIFYPEERfalse証明書チェックに設定されている場合、まったく無効になります。デフォルト値はtrueであるため、次を追加する必要があります。

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

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);

また、次の設定で問題ないかどうかも尋ねました。

curl_setopt($ch, CURLOPT_PROXY, true);

PHPドキュメントから:

リクエストをトンネリングするための HTTP プロキシ。

プロキシを使用している場合、「192.168.0.1:3128」のようなプロキシ アドレスを受け入れることを意味します。trueこの場合は意味がない

于 2013-03-05T20:01:45.503 に答える