【发布时间】:2019-05-22 21:02:42
【问题描述】:
当我从命令行执行如下操作时:
$ curl -X "POST" "https://ABCD/login/oauth2/access_token" -H "Authorization: Basic XXXX=" -H "Content-Type:application/x-www-form-urlencoded" --data-urlencode "realm=XXX" --data-urlencode "XXX=XXX"
但是当我从 PHP 中执行它时它不起作用:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://ABCD/login/oauth2/access_token');
curl_setopt($ch, CURLOPT_POST, 1);
$ss = array(
'realm' => 'XXX',
'XXX'=>'XXX'
);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($ss));
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HTTPHEADER,
array(
'Authorization: Basic XXXX=',
'Content-Type: application/x-www-form-urlencoded',
));
$result=curl_exec ($ch);
$http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close ($ch);
知道我做错了什么吗?我收到“必需参数或正文丢失或不正确”的 HTTP 状态。
【问题讨论】:
-
使用
curl_setopt($ch, CURLOPT_VERBOSE, 1);并将 PHP 输出与curl -v输出进行比较,以验证您发送的标头和有效负载是否完全相同。 -
它仍然无法正常工作。我一路尝试。只有 curl 7.29.0 (x86_64-redhat-linux-gnu) 通过命令行工作。但是 PHP curl 还没有失败。