PHP脚本中cURL请求的奇怪行为

PHP脚本中cURL请求的奇怪行为,php,apache,curl,browser,command-line-interface,Php,Apache,Curl,Browser,Command Line Interface,我在PHP代码中遇到了一个奇怪的cURL请求行为。 我正在标准WAMP Apache服务器上本地运行代码。 代码如下: $auth_info = "..."; $some_url = "..."; $channel = curl_init(); curl_setopt($channel, CURLOPT_URL, $some_url); curl_setopt($channel, CURLOPT_HTTPHEADER, array("Authorization: BASIC " . b

我在PHP代码中遇到了一个奇怪的cURL请求行为。 我正在标准WAMP Apache服务器上本地运行代码。 代码如下:

$auth_info = "...";
$some_url = "...";
$channel = curl_init();
curl_setopt($channel, CURLOPT_URL, $some_url);
curl_setopt($channel, CURLOPT_HTTPHEADER, 
    array("Authorization: BASIC " . base64_encode($auth_info))
);
curl_setopt($channel, CURLOPT_RETURNTRANSFER, true);
curl_setopt($channel, CURLOPT_HEADER, true);
$response = curl_exec($channel);
var_dump(curl_getinfo($channel));
$header_size = curl_getinfo($channel, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);
$body = substr($response, $header_size);
var_dump($header);
var_dump($body);
curl_close($channel);
如果我通过我的CLI(Powershell,因为我是在Windows上运行的),执行这个小PHP代码片段,一切都很好,所有var_转储工作正常,我可以看到$header和$body以及我期望的所有内容和数据都实际存在

现在来看看奇怪的行为。如果我在任何浏览器中打开包含上述代码段的脚本文件,它只会给出:

array (size=26)
'url' => string 'the_url_here' (length=39)
'content_type' => null
'http_code' => int 0
'header_size' => int 0
'request_size' => int 0
'filetime' => int -1
'ssl_verify_result' => int 0
'redirect_count' => int 0
'total_time' => float 1.234
'namelookup_time' => float 0
'connect_time' => float 0.109
'pretransfer_time' => float 0
'size_upload' => float 0
'size_download' => float 0
'speed_download' => float 0
'speed_upload' => float 0
'download_content_length' => float -1
'upload_content_length' => float -1
'starttransfer_time' => float 0
'redirect_time' => float 0
'redirect_url' => string '' (length=0)
'primary_ip' => string 'here_is_the_ip' (length=12)
'certinfo' => 
  array (size=0)
    empty
'primary_port' => int 443
'local_ip' => string 'here_is_my_ip' (length=13)
'local_port' => int -> my_local_port_here
boolean false
boolean false
我完全感到困惑,因为我看不出CLI启动的脚本和浏览器启动的脚本之间有什么区别。有人对此有想法吗


编辑说明:如果我对请求使用Guzzle,那么无论是在CLI还是在浏览器中,一切都可以正常工作。我仍然对为什么cURL会在这里引起问题的答案感兴趣。

您是否尝试过为cURL请求记录详细的输出

通常我觉得这是了解引擎盖下发生了什么的最好方法


也不是很流行,但是这种方法看起来很容易实现,而且更干净……

也许您需要一个正确的URL来运行测试?我怀疑您的CLI和WAMP指向不同的PHP安装。使用
php_info()
编写一个快速页面,查看两者的php可执行文件的位置。我无法在任何php_info()输出中找到指向php.exe的直接路径,但我可以确认,浏览器和CLI对于“加载的配置文件”具有不同的值。可能已经是这样了。@DevanLoper执行此脚本的脚本/命令是什么?@sitilge脚本存储在example.php文件中,在Powershell中它以“php example.php”开头,在浏览器中我使用的是“localhost/example.php”。这就是你想知道的吗?你是对的。详细调试请求会导致以下错误:“SSL证书问题:证书链中的自签名证书”。使用此处提出的任一解决方案:都有助于绕过此问题。我会接受你的回答,因为它实际上为我指明了解决方案,即使它是间接的;-)很高兴听到你找到了解决方案,证书也是我很多卷曲问题的原因