在PHP中卷曲-H标志

时间:2016-03-29 13:40:58

标签: php curl

我必须调用一个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'
); 

1 个答案:

答案 0 :(得分:2)

-H是curl命令行的标题,为什么要将它们设置为postfields?

似乎应该是:

$headers =  array('mail: mail@api.com', 'password: XXX');

这应该与上面的CLI命令相同。如果这不起作用,请检查curl_exec()的输出以查看服务器正在响应的内容。