2013-03-05 10 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に設定されている場合、証明書のチェックはまったく無効になります。

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 

PHP documentationから::デフォルト値はtrueであるとして、あなたが追加する必要がありますピアの証明書を検証することからカールを停止する

CURLOPT_SSL_VERIFYPEER FALSE。照合する代替証明書は、CURLOPT_CAINFOオプションで指定することも、証明書ディレクトリーをCURLOPT_CAPATHオプションで指定することもできます。 cURL 7.10ではデフォルトでTRUEになります。デフォルトのバンドルは、cURL 7.10からインストールされています。

証明書のチェックが無効な場合は、CURLOPT_SSL_VERIFYHOSTの設定を省略できます。だから、次の行を削除することができます。以下の設定がOKであれば

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 

また尋ねた:

curl_setopt($ch, CURLOPT_PROXY, true); 

PHP documentationから:

HTTPプロキシをトンネルにを介して要求。

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

+0

@DanielStenbergはいそうです。私の投稿のプロキシ関連部分だけが答えます: '// Proxy true? ' (質問をもう一度見て) – hek2mgl

+0

ああ、本当にありがとう。私は答えによって混乱し、Qと適切に相関しなかった可能性があります。おそらく、私のような愚か者が間違った結論を下すのが難しくなるように、答えでいくぶん明確になる可能性があります... –

+0

@DanielStenberg編集回答 – hek2mgl