什么是curl_setopt相当于EXEC的( '卷曲-k ...')

问题描述:

我试图复制此命令的功能:)什么是curl_setopt相当于EXEC的( '卷曲-k ...')

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导致cURL在SSL证书返回的主机名不同于其预期时导致失败。

是否有一个curl_setopt相当于-k?

+0

这是正确的选择。使用'curl_error()'来确定你得到的确切的错误。 – cmbuckley

+0

使用curl_error()是一个好主意,但没有错误被抛出。 – Justin

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE)-k在命令行上的等效(你真的不应该使用,因为它使连接容易受到MITM攻击)。

这里你的问题是,你认为-d "pameters=here"等同于将这些参数放在URL查询中,如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")); 

试一下:

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

http://www.php.net/manual/en/function.curl-setopt.php