“需要授权”使用PHP和cURL连接到自定义API

时间:2013-03-26 10:52:51

标签: php api rest curl

我正在创建我的第一个API,需要由合作伙伴使用cURL从他们的服务器访问。因此,在创建它时,我使用服务器#1创建测试连接脚本,使用服务器#2来托管API。在服务器#1上我有:

<?php

$url = "http://example.net/api/";

$data['api_key'] = "AFsASfafasasf";
$data['api_secret'] = "faskakfokfl3a";

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);

$result = curl_exec($ch);
curl_close($ch);

echo $result;

?>

在服务器#2上,API文件,我有这个(只是为了测试连接):

<?php

echo "Testing API...";
echo $_POST['api_key'];
echo $_POST['api_secret'];

?>

问题是,当我在服务器#1上运行测试脚本时,我得到了这个:

“需要授权

此服务器无法验证您是否有权访问所请求的文档。您提供了错误的凭据(例如,密码错误),或者您的浏览器不了解如何提供所需的凭据。

此外,在尝试使用ErrorDocument处理请求时遇到了401 Authorization Required错误。“

这肯定与cURL相关,因为Server#1可以与任何其他基本PHP脚本一起使用。

我在网上看到的所有例子似乎都不需要授权......所以我需要设置CURLOPT字段中的某些内容,或者.htaccess或其他我缺少的其他内容?< / p>

谢谢!

2 个答案:

答案 0 :(得分:3)

当服务器需要某种身份验证来访问网页时会出现401错误,并且在大多数情况下它是基本身份验证。

您能否确认您的服务器#1上是否配置了基本身份验证?如果服务器#1需要基本身份验证,那么浏览器将首次询问它,然后它将存储凭据并将其传递给每个后续请求。

如果配置了基本身份验证,则以下将使用cURL

传递凭据

curl_setopt($ ch,CURLOPT_USERPWD,$ username。“:”。$ password);

答案 1 :(得分:0)

当我尝试在运行API的同一台服务器上运行cURL命令时,我遇到了同样的错误。

我终于知道httpd.conf中的虚拟主机设置是针对单个网关IP设置的,而不是127.0.0.1。

因此,假设apache,我认为Server#2可能以与#1上的apache设置冲突的方式调用Server#1。

  1. 检查服务器#2上的/ etc / hosts文件,看看它是否直接通过内部IP呼叫服务器#1,或者只是默认发送到局域网外。

    < / LI>
  2. 检查服务器#1上的httpd.conf设置,特别是在解析域时配置了NameVirtualHost和VirtualHost的IP地址。它们需要配置为允许服务器#2呼叫的IP地址。