php curl vs cli curl,发布xml

更新谢谢答复:

有人可以指出以下区别:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $api_root);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, "xml"); // tried http_build_query also
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Added this, still no good
return curl_exec($ch);  // returns false

和:

$curl = "curl -X POST -d 'xml' {$api_root}";
return `$curl`;  // returns expected xml from server

AND / OR

更一般地说,对于php的libcurl默认值/标头和命令行上的curl之间的转换/引用有什么好的细分吗?

我知道这几乎是curl CLI to curl PHPCLI CURL -> PHP CURL的愚蠢,但我希望有更明确的东西.

最佳答案
curl_exec默认返回true或false.您需要指定CURLOPT_RETURNTRANSFER:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

由于curl_exec返回false(不是原始问题中指示的NULL),请尝试使用curl_error()来确定它返回false的原因.

TFM(读它):curl_exec(),curl_setopt()

编辑为后人的缘故:

OP发现SSL问题是障碍. libcurl(通过PHP调用)和curl命令行都为每个事务执行SSL对等验证,除非用户明确禁用它.

可能的情况是shell环境使用的是与PHP的libcurl实现不同的CA包.要解决此问题,请将CURLOPT_CAINFO设置为与shell的CURL_CA_BUNDLE环境变量相同,然后对等验证应该有效.

@OP:我很想知道上述建议是否在您的情况下得到确认,或者SSL配置是否有其他不同之处.

转载注明原文:php curl vs cli curl,发布xml - 代码日志