我必须调用一个API,并且我有终端命令可以工作,但我似乎无法使它与php一起工作(我得到403禁止错误)。这是有效的电话:
curl -X GET -H "mail: mail@api.com" -H "password: XXX" "http://api.com/rest/v1"
到目前为止,这是我在PHP中所拥有的:
$url = "http://api.com/rest/v1";
$headers = array(
"Content-type: application/json",
"Accept: application/json",
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
$auth = array('mail: mail@api.com', 'password: XXX');
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($auth));
$data = curl_exec($ch);
if (curl_errno($ch)) {
print "Error: " . curl_error($ch);
} else {
// Show me the result
var_dump($data);
curl_close($ch);
}
var_dump显示bool(true)但我也收到403错误消息。我也尝试在标题中添加电子邮件/密码但是没有用。像这样(并删除CURLOPT_POSTFIELDS行):
$headers = array(
"Content-type: application/json",
"Accept: application/json",
'mail: mail@api.com',
'password: XXX'
);
答案 0 :(得分:2)
-H是curl命令行的标题,为什么要将它们设置为postfields?
似乎应该是:
$headers = array('mail: mail@api.com', 'password: XXX');
这应该与上面的CLI命令相同。如果这不起作用,请检查curl_exec()的输出以查看服务器正在响应的内容。