我正在尝试使用CURL发出POST请求。使用Postman和在我的本地计算机上使用IIS时没有错误,但在XAMPP服务器和具有CA证书的Linux服务器上,我得到:
{"error":"OAUth Error","status":401,"message":"Client authentication failed"}
代码如下所示:
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.timewave.se/v3/oauth/token',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => array('client_id' => '1','client_secret' => 'abc........abc','grant_type' => 'client_credentials'),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
为什么在XAMPP服务器和Linux服务器上出现“客户端身份验证失败”?
2条答案
按热度按时间cngwdvgl1#
好消息是curl发出了请求,服务器做出了响应。
最可能的原因是HTTPS CA证书有问题。
你的 curl 后数据看起来不错。
他们的例子 curl :
--location选项包含在以下代码中:
并且对post数据使用数组,保证内容类型为“form”数据。
唯一的事情(除了SSL),我可以看到,可能会得到这个响应是一个错字在后数据。
但是还有一些其他的事情需要解决。
POST不是
CURLOPT_CUSTOMREQUEST
的有效参数虽然它可能仍然工作。
PHP手册列出了有效的参数,POST不在其中。
您应该用途:
CURLOPT_POST=>true,
个这就带来了另一个问题。因为auth凭证必须保持安全,所以很可能不能使用
CURLOPT_SSL_VERIFYPEER=>false,
。您可能需要curl_set_opt
URLOPT_CAINFO
选项,或者可以使用CURLOPT_CAPATH
指定证书目录您应该查看请求标题。
你可能会发现一些不对劲的地方。
将
CURLINFO_HEADER_OUT=>true
相加然后在
curl_exec($curl);
之后或者查看请求和响应的所有详细信息,包括请求头。
响应标头应如下所示:
ct3nt3jp2#
感谢所有的回应,我在error.log中发现了这个问题
已编辑本地服务器上的文件..\apache\conf\extra\httpd-ssl.conf
https://kinsta.com/knowledgebase/xampp-server-certificate-does-not-include-an-id-which-matches-the-server-name/
至
由于某种原因,它在没有任何修改的情况下工作在Linux服务器上