使用cURL头问题的REST-ful连接

时间:2012-03-22 21:02:29

标签: php rest curl

我花了几个小时利用PHP文档,API文档以及stackoverflow上的其他帖子对此进行故障排除,并最终寻求帮助。

我正在尝试使用新的pbSmartConnections API编写接口:API Documentation

我一直在使用fsockopen和cURL进行挑战,但是我似乎能够在使用cURL的过程中获得更多,所以这就是我在这里提出的。这是挑战:

根据我对文档的理解,我应该将ApiKey作为标题的一部分传递。当我这样做时,无论我尝试构建代码的方式如何,我总是收到以下回复:

{
    "ErrorCode": 10,
    "Message": "Unauthorized"
}

我希望SO会员可以在下面的代码中看到一些内容(请提供任何批评和/或建议!): (注意:下面的API密钥有效。它连接到一个没有任何价值的帐户,所以请随意在测试中使用它)

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://rest.pbsyscontrol.com/v1/Ping");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type"=>"application/json", "Accept"=>"application/json", "ApiKey"=>"41460b3f-8f35-4878-b78d-49ca7f29c071"));
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_HTTPGET, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$response = curl_exec($ch);
$http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
?>

如果您想知道,虽然我希望这可以作为标题的一部分工作,但我也尝试将其作为URL的一部分传递:

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://rest.pbsyscontrol.com/v1/Ping?ApiKey=41460b3f-8f35-4878-b78d-49ca7f29c071");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type"=>"application/json", "Accept"=>"application/json", "ApiKey"=>"41460b3f-8f35-4878-b78d-49ca7f29c071"));
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_HTTPGET, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$response = curl_exec($ch);
$http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
?>

2 个答案:

答案 0 :(得分:2)

PHP文档说:

  

要设置的HTTP标头字段数组,格式为array('Content-type: text/plain', 'Content-length: 100')

因此,您希望使用以下行而不是原始行:

 curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json", "Accept: application/json", "ApiKey: 41460b3f-8f35-4878-b78d-49ca7f29c071"));

但是,这并没有解决ApiKey可能无效的问题。

答案 1 :(得分:2)

我终于从支持中回复了,他们表示我使用了不正确的网址(尽管此时,它是API Documentation中的网址)

API文档中的URL是他们的STAGING,而不是PRODUCTION。令人惊讶的是将URL切换到他们在回复中发送的正确的URL - rest.api.pbsmartconnections.com为连接做了什么。那一次改变,一切都开始正常运作。

感谢所有看过的人,感谢@mvdnes提供有关如何设置标题的建议。