2

このコマンドの機能を複製しようとしています:

exec('curl -k -d "pameters=here" https://apiurlhere.com', $output);

curl_exec()を使用:

$url =  'https://apiurlhere.com?parameters=here';
$ci = curl_init();
curl_setopt($ci, CURLOPT_POST, TRUE);
curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ci, CURLOPT_URL, $url);
$response = curl_exec($ci);
curl_close ($ci);
print_r($response);

ドキュメント(http://php.net/manual/en/function.curl-setopt.php)にあるさまざまなオプションを試し、CURLOPT_SSL_VERIFYPEERだと思ったのですが、それでも失敗しました(応答が空に戻ります)。

私が投稿しているURLはSNIを使用しているため、SSL証明書が予想とは異なるホスト名を返すとcURLが失敗します。

-kと同等のcurl_setoptはありますか?

4

2 に答える 2

2

それを試してください:

 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 

http://www.php.net/manual/en/function.curl-setopt.phpを参照してください

于 2012-10-17T19:58:06.457 に答える
2

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE)これはコマンドラインと同等です-k(接続がMITM攻撃に対して脆弱になるため、実際には使用しないでください)。

ここでの問題は、-d "pameters=here"これらのパラメータをこのようにURLクエリに入れることと同等であると想定していることですhttps://apiurlhere.com?parameters=here

これは当てはまりません。次のドキュメントを参照してください-d

(HTTP)ユーザーがHTMLフォームに入力して送信ボタンを押したときにブラウザーが行うのと同じ方法で、POSTリクエストで指定されたデータをHTTPサーバーに送信します。これにより、curlはcontent-type application/x-www-form-urlencodedを使用してデータをサーバーに渡します。

おそらくこれに使用する必要がありますPOSTFIELDS

curl_setopt($ch, CURLOPT_POSTFIELDS, array("parameters" => "here"));
于 2012-10-17T20:19:21.417 に答える