什么是exec的curl_setopt等价物('curl -k ...')

时间:2012-10-17 19:54:45

标签: php curl

我正在尝试复制此命令的功能:

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失败。

curl_setopt是否相当于-k?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE)相当于命令行中的-k(您不应该使用它,因为它会使连接容易受到MITM攻击)。

您的问题在于,您假设-d "pameters=here"等同于将这些参数放在网址查询中,如https://apiurlhere.com?parameters=here

情况并非如此,请参阅-d的文档:

  

(HTTP)将POST请求中的指定数据发送到HTTP服务器,就像用户拥有的浏览器一样。   填写HTML表单并按下提交按钮。这将导致   curl将数据传递给   服务器使用内容类型application / x-www-form-urlencoded。

您可能应该使用POSTFIELDS

curl_setopt($ch, CURLOPT_POSTFIELDS, array("parameters" => "here"));